"use strict"; /* * 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/). */ exports.id = "vendor-chunks/zod"; exports.ids = ["vendor-chunks/zod"]; exports.modules = { /***/ "(action-browser)/./node_modules/zod/index.js": /*!***********************************!*\ !*** ./node_modules/zod/index.js ***! \***********************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ z: () => (/* reexport module object */ _v3_external_js__WEBPACK_IMPORTED_MODULE_0__)\n/* harmony export */ });\n/* harmony import */ var _v3_external_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./v3/external.js */ \"(action-browser)/./node_modules/zod/v3/external.js\");\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _v3_external_js__WEBPACK_IMPORTED_MODULE_0__) if([\"default\",\"z\"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _v3_external_js__WEBPACK_IMPORTED_MODULE_0__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_v3_external_js__WEBPACK_IMPORTED_MODULE_0__);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96b2QvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQXNDO0FBQ0w7QUFDcEI7QUFDYixpRUFBZUEsNENBQUNBLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly93aGlza3ktdmF1bHQvLi9ub2RlX21vZHVsZXMvem9kL2luZGV4LmpzPzczZWIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgeiBmcm9tIFwiLi92My9leHRlcm5hbC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdjMvZXh0ZXJuYWwuanNcIjtcbmV4cG9ydCB7IHogfTtcbmV4cG9ydCBkZWZhdWx0IHo7XG4iXSwibmFtZXMiOlsieiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/zod/index.js\n"); /***/ }), /***/ "(action-browser)/./node_modules/zod/v3/ZodError.js": /*!*****************************************!*\ !*** ./node_modules/zod/v3/ZodError.js ***! \*****************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ZodError: () => (/* binding */ ZodError),\n/* harmony export */ ZodIssueCode: () => (/* binding */ ZodIssueCode),\n/* harmony export */ quotelessJson: () => (/* binding */ quotelessJson)\n/* harmony export */ });\n/* harmony import */ var _helpers_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers/util.js */ \"(action-browser)/./node_modules/zod/v3/helpers/util.js\");\n\nconst ZodIssueCode = _helpers_util_js__WEBPACK_IMPORTED_MODULE_0__.util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\"\n]);\nconst quotelessJson = (obj)=>{\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nclass ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues){\n super();\n this.issues = [];\n this.addIssue = (sub)=>{\n this.issues = [\n ...this.issues,\n sub\n ];\n };\n this.addIssues = (subs = [])=>{\n this.issues = [\n ...this.issues,\n ...subs\n ];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n } else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper || function(issue) {\n return issue.message;\n };\n const fieldErrors = {\n _errors: []\n };\n const processError = (error)=>{\n for (const issue of error.issues){\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n } else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n } else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n } else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n } else {\n let curr = fieldErrors;\n let i = 0;\n while(i < issue.path.length){\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || {\n _errors: []\n };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n } else {\n curr[el] = curr[el] || {\n _errors: []\n };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, _helpers_util_js__WEBPACK_IMPORTED_MODULE_0__.util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue)=>issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues){\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n } else {\n formErrors.push(mapper(sub));\n }\n }\n return {\n formErrors,\n fieldErrors\n };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues)=>{\n const error = new ZodError(issues);\n return error;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96b2QvdjMvWm9kRXJyb3IuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUF5QztBQUNsQyxNQUFNQyxlQUFlRCxrREFBSUEsQ0FBQ0UsV0FBVyxDQUFDO0lBQ3pDO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0gsRUFBRTtBQUNJLE1BQU1DLGdCQUFnQixDQUFDQztJQUMxQixNQUFNQyxPQUFPQyxLQUFLQyxTQUFTLENBQUNILEtBQUssTUFBTTtJQUN2QyxPQUFPQyxLQUFLRyxPQUFPLENBQUMsZUFBZTtBQUN2QyxFQUFFO0FBQ0ssTUFBTUMsaUJBQWlCQztJQUMxQixJQUFJQyxTQUFTO1FBQ1QsT0FBTyxJQUFJLENBQUNDLE1BQU07SUFDdEI7SUFDQUMsWUFBWUQsTUFBTSxDQUFFO1FBQ2hCLEtBQUs7UUFDTCxJQUFJLENBQUNBLE1BQU0sR0FBRyxFQUFFO1FBQ2hCLElBQUksQ0FBQ0UsUUFBUSxHQUFHLENBQUNDO1lBQ2IsSUFBSSxDQUFDSCxNQUFNLEdBQUc7bUJBQUksSUFBSSxDQUFDQSxNQUFNO2dCQUFFRzthQUFJO1FBQ3ZDO1FBQ0EsSUFBSSxDQUFDQyxTQUFTLEdBQUcsQ0FBQ0MsT0FBTyxFQUFFO1lBQ3ZCLElBQUksQ0FBQ0wsTUFBTSxHQUFHO21CQUFJLElBQUksQ0FBQ0EsTUFBTTttQkFBS0s7YUFBSztRQUMzQztRQUNBLE1BQU1DLGNBQWMsV0FBV0MsU0FBUztRQUN4QyxJQUFJQyxPQUFPQyxjQUFjLEVBQUU7WUFDdkIsbUNBQW1DO1lBQ25DRCxPQUFPQyxjQUFjLENBQUMsSUFBSSxFQUFFSDtRQUNoQyxPQUNLO1lBQ0QsSUFBSSxDQUFDSSxTQUFTLEdBQUdKO1FBQ3JCO1FBQ0EsSUFBSSxDQUFDSyxJQUFJLEdBQUc7UUFDWixJQUFJLENBQUNYLE1BQU0sR0FBR0E7SUFDbEI7SUFDQVksT0FBT0Ms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M0I7UUFDSjtRQUNBLE9BQU87WUFBRW9DO1lBQVl0QjtRQUFZO0lBQ3JDO0lBQ0EsSUFBSXNCLGFBQWE7UUFDYixPQUFPLElBQUksQ0FBQ0QsT0FBTztJQUN2QjtBQUNKO0FBQ0F6QyxTQUFTNEMsTUFBTSxHQUFHLENBQUN6QztJQUNmLE1BQU1vQixRQUFRLElBQUl2QixTQUFTRztJQUMzQixPQUFPb0I7QUFDWCIsInNvdXJjZXMiOlsid2VicGFjazovL3doaXNreS12YXVsdC8uL25vZGVfbW9kdWxlcy96b2QvdjMvWm9kRXJyb3IuanM/YjJhOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1dGlsIH0gZnJvbSBcIi4vaGVscGVycy91dGlsLmpzXCI7XG5leHBvcnQgY29uc3QgWm9kSXNzdWVDb2RlID0gdXRpbC5hcnJheVRvRW51bShbXG4gICAgXCJpbnZhbGlkX3R5cGVcIixcbiAgICBcImludmFsaWRfbGl0ZXJhbFwiLFxuICAgIFwiY3VzdG9tXCIsXG4gICAgXCJpbnZhbGlkX3VuaW9uXCIsXG4gICAgXCJpbnZhbGlkX3VuaW9uX2Rpc2NyaW1pbmF0b3JcIixcbiAgICBcImludmFsaWRfZW51bV92YWx1ZVwiLFxuICAgIFwidW5yZWNvZ25pemVkX2tleXNcIixcbiAgICBcImludmFsaWRfYXJndW1lbnRzXCIsXG4gICAgXCJpbnZhbGlkX3JldHVybl90eXBlXCIsXG4gICAgXCJpbnZhbGlkX2RhdGVcIixcbiAgICBcImludmFsaWRfc3RyaW5nXCIsXG4gICAgXCJ0b29fc21hbGxcIixcbiAgICBcInRvb19iaWdcIixcbiAgICBcImludmFsaWRfaW50ZXJzZWN0aW9uX3R5cGVzXCIsXG4gICAgXCJub3RfbXVsdGlwbGVfb2ZcIixcbiAgICBcIm5vdF9maW5pdGVcIixcbl0pO1xuZXhwb3J0IGNvbnN0IHF1b3RlbGVzc0pzb24gPSAob2JqKSA9PiB7XG4gICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KG9iaiwgbnVsbCwgMik7XG4gICAgcmV0dXJuIGpzb24ucmVwbGFjZSgvXCIoW15cIl0rKVwiOi9nLCBcIiQxOlwiKTtcbn07XG5leHBvcnQgY2xhc3MgWm9kRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgZ2V0IGVycm9ycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNzdWVzO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcihpc3N1ZXMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pc3N1ZXMgPSBbXTtcbiAgICAgICAgdGhpcy5hZGRJc3N1ZSA9IChzdWIpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNzdWVzID0gWy4uLnRoaXMuaXNzdWVzLCBzdWJdO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmFkZElzc3VlcyA9IChzdWJzID0gW10pID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNzdWVzID0gWy4uLnRoaXMuaXNzdWVzLCAuLi5zdWJzXTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYWN0dWFsUHJvdG8gPSBuZXcudGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGJhbi9iYW5cbiAgICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBhY3R1YWxQcm90byk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9fcHJvdG9fXyA9IGFjdHVhbFByb3RvO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmFtZSA9IFwiWm9kRXJyb3JcIjtcbiAgICAgICAgdGhpcy5pc3N1ZXMgPSBpc3N1ZXM7XG4gICAgfVxuICAgIGZvcm1hdChfbWFwcGVyKSB7XG4gICAgICAgIGNvbnN0IG1hcHBlciA9IF9tYXBwZXIgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChpc3N1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc3N1ZS5tZXNzYWdlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSB7IF9lcnJvcnM6IFtdIH07XG4gICAgICAgIGNvbnN0IHByb2Nlc3NFcnJvciA9IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpc3N1ZSBvZiBlcnJvci5pc3N1ZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUuY29kZSA9PT0gXCJpbnZhbGlkX3VuaW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNzdWUudW5pb25FcnJvcnMubWFwKHByb2Nlc3NFcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLmNvZGUgPT09IFwiaW52YWxpZF9yZXR1cm5fdHlwZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NFcnJvcihpc3N1ZS5yZXR1cm5UeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS5jb2RlID09PSBcImludmFsaWRfYXJndW1lbnRzXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0Vycm9yKGlzc3VlLmFyZ3VtZW50c0Vycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUucGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRFcnJvcnMuX2Vycm9ycy5wdXNoKG1hcHBlcihpc3N1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnIgPSBmaWVsZEVycm9ycztcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IGlzc3VlLnBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbCA9IGlzc3VlLnBhdGhbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXJtaW5hbCA9IGkgPT09IGlzc3VlLnBhdGgubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGVybWluYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyW2VsXSA9IGN1cnJbZWxdIHx8IHsgX2Vycm9yczogW10gfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAodHlwZW9mIGVsID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBjdXJyW2VsXSA9IGN1cnJbZWxdIHx8IHsgX2Vycm9yczogW10gfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9IGVsc2UgaWYgKHR5cGVvZiBlbCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgY29uc3QgZXJyb3JBcnJheTogYW55ID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBlcnJvckFycmF5Ll9lcnJvcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGN1cnJbZWxdID0gY3VycltlbF0gfHwgZXJyb3JBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyW2VsXSA9IGN1cnJbZWxdIHx8IHsgX2Vycm9yczogW10gfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyW2VsXS5fZXJyb3JzLnB1c2gobWFwcGVyKGlzc3VlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyID0gY3VycltlbF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHByb2Nlc3NFcnJvcih0aGlzKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkRXJyb3JzO1xuICAgIH1cbiAgICBzdGF0aWMgYXNzZXJ0KHZhbHVlKSB7XG4gICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgWm9kRXJyb3IpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdCBhIFpvZEVycm9yOiAke3ZhbHVlfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlO1xuICAgIH1cbiAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuaXNzdWVzLCB1dGlsLmpzb25TdHJpbmdpZnlSZXBsYWNlciwgMik7XG4gICAgfVxuICAgIGdldCBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc3N1ZXMubGVuZ3RoID09PSAwO1xuICAgIH1cbiAgICBmbGF0dGVuKG1hcHBlciA9IChpc3N1ZSkgPT4gaXNzdWUubWVzc2FnZSkge1xuICAgICAgICBjb25zdCBmaWVsZEVycm9ycyA9IHt9O1xuICAgICAgICBjb25zdCBmb3JtRXJyb3JzID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgc3ViIG9mIHRoaXMuaXNzdWVzKSB7XG4gICAgICAgICAgICBpZiAoc3ViLnBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0RWwgPSBzdWIucGF0aFswXTtcbiAgICAgICAgICAgICAgICBmaWVsZEVycm9yc1tmaXJzdEVsXSA9IGZpZWxkRXJyb3JzW2ZpcnN0RWxdIHx8IFtdO1xuICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzW2ZpcnN0RWxdLnB1c2gobWFwcGVyKHN1YikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9ybUVycm9ycy5wdXNoKG1hcHBlcihzdWIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBmb3JtRXJyb3JzLCBmaWVsZEVycm9ycyB9O1xuICAgIH1cbiAgICBnZXQgZm9ybUVycm9ycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmxhdHRlbigpO1xuICAgIH1cbn1cblpvZEVycm9yLmNyZWF0ZSA9IChpc3N1ZXMpID0+IHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBab2RFcnJvcihpc3N1ZXMpO1xuICAgIHJldHVybiBlcnJvcjtcbn07XG4iXSwibmFtZXMiOlsidXRpbCIsIlpvZElzc3VlQ29kZSIsImFycmF5VG9FbnVtIiwicXVvdGVsZXNzSnNvbiIsIm9iaiIsImpzb24iLCJKU09OIiwic3RyaW5naWZ5IiwicmVwbGFjZSIsIlpvZEVycm9yIiwiRXJyb3IiLCJlcnJvcnMiLCJpc3N1ZXMiLCJjb25zdHJ1Y3RvciIsImFkZElzc3VlIiwic3ViIiwiYWRkSXNzdWVzIiwic3VicyIsImFjdHVhbFByb3RvIiwicHJvdG90eXBlIiwiT2JqZWN0Iiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJuYW1lIiwiZm9ybWF0IiwiX21hcHBlciIsIm1hcHBlciIsImlzc3VlIiwibWVzc2FnZSIsImZpZWxkRXJyb3JzIiwiX2Vycm9ycyIsInByb2Nlc3NFcnJvciIsImVycm9yIiwiY29kZSIsInVuaW9uRXJyb3JzIiwibWFwIiwicmV0dXJuVHlwZUVycm9yIiwiYXJndW1lbnRzRXJyb3IiLCJwYXRoIiwibGVuZ3RoIiwicHVzaCIsImN1cnIiLCJpIiwiZWwiLCJ0ZXJtaW5hbCIsImFzc2VydCIsInZhbHVlIiwidG9TdHJpbmciLCJqc29uU3RyaW5naWZ5UmVwbGFjZXIiLCJpc0VtcHR5IiwiZmxhdHRlbiIsImZvcm1FcnJvcnMiLCJmaXJzdEVsIiwiY3JlYXRlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/zod/v3/ZodError.js\n"); /***/ }), /***/ "(action-browser)/./node_modules/zod/v3/errors.js": /*!***************************************!*\ !*** ./node_modules/zod/v3/errors.js ***! \***************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ defaultErrorMap: () => (/* reexport safe */ _locales_en_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ getErrorMap: () => (/* binding */ getErrorMap),\n/* harmony export */ setErrorMap: () => (/* binding */ setErrorMap)\n/* harmony export */ });\n/* harmony import */ var _locales_en_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./locales/en.js */ \"(action-browser)/./node_modules/zod/v3/locales/en.js\");\n\nlet overrideErrorMap = _locales_en_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n\nfunction setErrorMap(map) {\n overrideErrorMap = map;\n}\nfunction getErrorMap() {\n return overrideErrorMap;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96b2QvdjMvZXJyb3JzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBOEM7QUFDOUMsSUFBSUMsbUJBQW1CRCxzREFBZUE7QUFDWDtBQUNwQixTQUFTRSxZQUFZQyxHQUFHO0lBQzNCRixtQkFBbUJFO0FBQ3ZCO0FBQ08sU0FBU0M7SUFDWixPQUFPSDtBQUNYIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vd2hpc2t5LXZhdWx0Ly4vbm9kZV9tb2R1bGVzL3pvZC92My9lcnJvcnMuanM/MjZlMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVmYXVsdEVycm9yTWFwIGZyb20gXCIuL2xvY2FsZXMvZW4uanNcIjtcbmxldCBvdmVycmlkZUVycm9yTWFwID0gZGVmYXVsdEVycm9yTWFwO1xuZXhwb3J0IHsgZGVmYXVsdEVycm9yTWFwIH07XG5leHBvcnQgZnVuY3Rpb24gc2V0RXJyb3JNYXAobWFwKSB7XG4gICAgb3ZlcnJpZGVFcnJvck1hcCA9IG1hcDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRFcnJvck1hcCgpIHtcbiAgICByZXR1cm4gb3ZlcnJpZGVFcnJvck1hcDtcbn1cbiJdLCJuYW1lcyI6WyJkZWZhdWx0RXJyb3JNYXAiLCJvdmVycmlkZUVycm9yTWFwIiwic2V0RXJyb3JNYXAiLCJtYXAiLCJnZXRFcnJvck1hcCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/zod/v3/errors.js\n"); /***/ }), /***/ "(action-browser)/./node_modules/zod/v3/external.js": /*!*****************************************!*\ !*** ./node_modules/zod/v3/external.js ***! \*****************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _errors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./errors.js */ \"(action-browser)/./node_modules/zod/v3/errors.js\");\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _errors_js__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _errors_js__WEBPACK_IMPORTED_MODULE_0__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n/* harmony import */ var _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/parseUtil.js */ \"(action-browser)/./node_modules/zod/v3/helpers/parseUtil.js\");\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_1__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_1__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n/* harmony import */ var _helpers_typeAliases_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers/typeAliases.js */ \"(action-browser)/./node_modules/zod/v3/helpers/typeAliases.js\");\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _helpers_typeAliases_js__WEBPACK_IMPORTED_MODULE_2__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _helpers_typeAliases_js__WEBPACK_IMPORTED_MODULE_2__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n/* harmony import */ var _helpers_util_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers/util.js */ \"(action-browser)/./node_modules/zod/v3/helpers/util.js\");\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _helpers_util_js__WEBPACK_IMPORTED_MODULE_3__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _helpers_util_js__WEBPACK_IMPORTED_MODULE_3__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./types.js */ \"(action-browser)/./node_modules/zod/v3/types.js\");\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _types_js__WEBPACK_IMPORTED_MODULE_4__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _types_js__WEBPACK_IMPORTED_MODULE_4__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n/* harmony import */ var _ZodError_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ZodError.js */ \"(action-browser)/./node_modules/zod/v3/ZodError.js\");\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _ZodError_js__WEBPACK_IMPORTED_MODULE_5__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _ZodError_js__WEBPACK_IMPORTED_MODULE_5__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96b2QvdjMvZXh0ZXJuYWwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUE0QjtBQUNXO0FBQ0U7QUFDUDtBQUNQO0FBQ0ciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly93aGlza3ktdmF1bHQvLi9ub2RlX21vZHVsZXMvem9kL3YzL2V4dGVybmFsLmpzP2M1OGMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9oZWxwZXJzL3BhcnNlVXRpbC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vaGVscGVycy90eXBlQWxpYXNlcy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vaGVscGVycy91dGlsLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlcy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vWm9kRXJyb3IuanNcIjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/zod/v3/external.js\n"); /***/ }), /***/ "(action-browser)/./node_modules/zod/v3/helpers/errorUtil.js": /*!**************************************************!*\ !*** ./node_modules/zod/v3/helpers/errorUtil.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ errorUtil: () => (/* binding */ errorUtil)\n/* harmony export */ });\nvar errorUtil;\n(function(errorUtil) {\n errorUtil.errToObj = (message)=>typeof message === \"string\" ? {\n message\n } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message)=>typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96b2QvdjMvaGVscGVycy9lcnJvclV0aWwuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFPLElBQUlBLFVBQVU7QUFDcEIsVUFBVUEsU0FBUztJQUNoQkEsVUFBVUMsUUFBUSxHQUFHLENBQUNDLFVBQVksT0FBT0EsWUFBWSxXQUFXO1lBQUVBO1FBQVEsSUFBSUEsV0FBVyxDQUFDO0lBQzFGLHFCQUFxQjtJQUNyQkYsVUFBVUcsUUFBUSxHQUFHLENBQUNELFVBQVksT0FBT0EsWUFBWSxXQUFXQSxVQUFVQSxTQUFTQTtBQUN2RixHQUFHRixhQUFjQSxDQUFBQSxZQUFZLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly93aGlza3ktdmF1bHQvLi9ub2RlX21vZHVsZXMvem9kL3YzL2hlbHBlcnMvZXJyb3JVdGlsLmpzPzIzOGIiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHZhciBlcnJvclV0aWw7XG4oZnVuY3Rpb24gKGVycm9yVXRpbCkge1xuICAgIGVycm9yVXRpbC5lcnJUb09iaiA9IChtZXNzYWdlKSA9PiB0eXBlb2YgbWVzc2FnZSA9PT0gXCJzdHJpbmdcIiA/IHsgbWVzc2FnZSB9IDogbWVzc2FnZSB8fCB7fTtcbiAgICAvLyBiaW9tZS1pZ25vcmUgbGludDpcbiAgICBlcnJvclV0aWwudG9TdHJpbmcgPSAobWVzc2FnZSkgPT4gdHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIgPyBtZXNzYWdlIDogbWVzc2FnZT8ubWVzc2FnZTtcbn0pKGVycm9yVXRpbCB8fCAoZXJyb3JVdGlsID0ge30pKTtcbiJdLCJuYW1lcyI6WyJlcnJvclV0aWwiLCJlcnJUb09iaiIsIm1lc3NhZ2UiLCJ0b1N0cmluZyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/zod/v3/helpers/errorUtil.js\n"); /***/ }), /***/ "(action-browser)/./node_modules/zod/v3/helpers/parseUtil.js": /*!**************************************************!*\ !*** ./node_modules/zod/v3/helpers/parseUtil.js ***! \**************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DIRTY: () => (/* binding */ DIRTY),\n/* harmony export */ EMPTY_PATH: () => (/* binding */ EMPTY_PATH),\n/* harmony export */ INVALID: () => (/* binding */ INVALID),\n/* harmony export */ OK: () => (/* binding */ OK),\n/* harmony export */ ParseStatus: () => (/* binding */ ParseStatus),\n/* harmony export */ addIssueToContext: () => (/* binding */ addIssueToContext),\n/* harmony export */ isAborted: () => (/* binding */ isAborted),\n/* harmony export */ isAsync: () => (/* binding */ isAsync),\n/* harmony export */ isDirty: () => (/* binding */ isDirty),\n/* harmony export */ isValid: () => (/* binding */ isValid),\n/* harmony export */ makeIssue: () => (/* binding */ makeIssue)\n/* harmony export */ });\n/* harmony import */ var _errors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../errors.js */ \"(action-browser)/./node_modules/zod/v3/errors.js\");\n/* harmony import */ var _locales_en_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../locales/en.js */ \"(action-browser)/./node_modules/zod/v3/locales/en.js\");\n\n\nconst makeIssue = (params)=>{\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [\n ...path,\n ...issueData.path || []\n ];\n const fullIssue = {\n ...issueData,\n path: fullPath\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps.filter((m)=>!!m).slice().reverse();\n for (const map of maps){\n errorMessage = map(fullIssue, {\n data,\n defaultError: errorMessage\n }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage\n };\n};\nconst EMPTY_PATH = [];\nfunction addIssueToContext(ctx, issueData) {\n const overrideMap = (0,_errors_js__WEBPACK_IMPORTED_MODULE_0__.getErrorMap)();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n overrideMap,\n overrideMap === _locales_en_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"] ? undefined : _locales_en_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]\n ].filter((x)=>!!x)\n });\n ctx.common.issues.push(issue);\n}\nclass ParseStatus {\n constructor(){\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\") this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\") this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results){\n if (s.status === \"aborted\") return INVALID;\n if (s.status === \"dirty\") status.dirty();\n arrayValue.push(s.value);\n }\n return {\n status: status.value,\n value: arrayValue\n };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs){\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs){\n const { key, value } = pair;\n if (key.status === \"aborted\") return INVALID;\n if (value.status === \"aborted\") return INVALID;\n if (key.status === \"dirty\") status.dirty();\n if (value.status === \"dirty\") status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return {\n status: status.value,\n value: finalObject\n };\n }\n}\nconst INVALID = Object.freeze({\n status: \"aborted\"\n});\nconst DIRTY = (value)=>({\n status: \"dirty\",\n value\n });\nconst OK = (value)=>({\n status: \"valid\",\n value\n });\nconst isAborted = (x)=>x.status === \"aborted\";\nconst isDirty = (x)=>x.status === \"dirty\";\nconst isValid = (x)=>x.status === \"valid\";\nconst isAsync = (x)=>typeof Promise !== \"undefined\" && x instanceof Promise;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96b2QvdjMvaGVscGVycy9wYXJzZVV0aWwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUEyQztBQUNJO0FBQ3hDLE1BQU1FLFlBQVksQ0FBQ0M7SUFDdEIsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLElBQUksRUFBRUMsU0FBUyxFQUFFQyxTQUFTLEVBQUUsR0FBR0o7SUFDN0MsTUFBTUssV0FBVztXQUFJSDtXQUFVRSxVQUFVRixJQUFJLElBQUksRUFBRTtLQUFFO0lBQ3JELE1BQU1JLFlBQVk7UUFDZCxHQUFHRixTQUFTO1FBQ1pGLE1BQU1HO0lBQ1Y7SUFDQSxJQUFJRCxVQUFVRyxPQUFPLEtBQUtDLFdBQVc7UUFDakMsT0FBTztZQUNILEdBQUdKLFNBQVM7WUFDWkYsTUFBTUc7WUFDTkUsU0FBU0gsVUFBVUcsT0FBTztRQUM5QjtJQUNKO0lBQ0EsSUFBSUUsZUFBZTtJQUNuQixNQUFNQyxPQUFPUCxVQUNSUSxNQUFNLENBQUMsQ0FBQ0MsSUFBTSxDQUFDLENBQUNBLEdBQ2hCQyxLQUFLLEdBQ0xDLE9BQU87SUFDWixLQUFLLE1BQU1DLE9BQU9MLEtBQU07UUFDcEJELGVBQWVNLElBQUlULFdBQVc7WUFBRUw7WUFBTWUsY0FBY1A7UUFBYSxHQUFHRixPQUFPO0lBQy9FO0lBQ0EsT0FBTztRQUNILEdBQUdILFNBQVM7UUFDWkYsTUFBTUc7UUFDTkUsU0FBU0U7SUFDYjtBQUNKLEVBQUU7QUFDSyxNQUFNUSxhQUFhLEVBQUUsQ0FBQztBQUN0QixTQUFTQyxrQkFBa0JDLEdBQUcsRUFBRWYsU0FBUztJQUM1QyxNQUFNZ0IsY0FBY3ZCLHVEQUFXQTtJQUMvQixNQUFNd0IsUUFBUXRCLFVBQVU7UUFDcEJLLFdBQVdBO1FBQ1hILE1BQU1rQixJQUFJbEIsSUFBSTtRQUNkQyxNQUFNaUIsSUFBSWpCLElBQUk7UUFDZEMsV0FBVztZQUNQZ0IsSUFBSUcsTUFBTSxDQUFDQyxrQkFBa0I7WUFDN0JKLElB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L25vZGVfbW9kdWxlcy96b2QvdjMvaGVscGVycy9wYXJzZVV0aWwuanM/NWEwYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRFcnJvck1hcCB9IGZyb20gXCIuLi9lcnJvcnMuanNcIjtcbmltcG9ydCBkZWZhdWx0RXJyb3JNYXAgZnJvbSBcIi4uL2xvY2FsZXMvZW4uanNcIjtcbmV4cG9ydCBjb25zdCBtYWtlSXNzdWUgPSAocGFyYW1zKSA9PiB7XG4gICAgY29uc3QgeyBkYXRhLCBwYXRoLCBlcnJvck1hcHMsIGlzc3VlRGF0YSB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gWy4uLnBhdGgsIC4uLihpc3N1ZURhdGEucGF0aCB8fCBbXSldO1xuICAgIGNvbnN0IGZ1bGxJc3N1ZSA9IHtcbiAgICAgICAgLi4uaXNzdWVEYXRhLFxuICAgICAgICBwYXRoOiBmdWxsUGF0aCxcbiAgICB9O1xuICAgIGlmIChpc3N1ZURhdGEubWVzc2FnZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5pc3N1ZURhdGEsXG4gICAgICAgICAgICBwYXRoOiBmdWxsUGF0aCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGlzc3VlRGF0YS5tZXNzYWdlLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJcIjtcbiAgICBjb25zdCBtYXBzID0gZXJyb3JNYXBzXG4gICAgICAgIC5maWx0ZXIoKG0pID0+ICEhbSlcbiAgICAgICAgLnNsaWNlKClcbiAgICAgICAgLnJldmVyc2UoKTtcbiAgICBmb3IgKGNvbnN0IG1hcCBvZiBtYXBzKSB7XG4gICAgICAgIGVycm9yTWVzc2FnZSA9IG1hcChmdWxsSXNzdWUsIHsgZGF0YSwgZGVmYXVsdEVycm9yOiBlcnJvck1lc3NhZ2UgfSkubWVzc2FnZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uaXNzdWVEYXRhLFxuICAgICAgICBwYXRoOiBmdWxsUGF0aCxcbiAgICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlLFxuICAgIH07XG59O1xuZXhwb3J0IGNvbnN0IEVNUFRZX1BBVEggPSBbXTtcbmV4cG9ydCBmdW5jdGlvbiBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIGlzc3VlRGF0YSkge1xuICAgIGNvbnN0IG92ZXJyaWRlTWFwID0gZ2V0RXJyb3JNYXAoKTtcbiAgICBjb25zdCBpc3N1ZSA9IG1ha2VJc3N1ZSh7XG4gICAgICAgIGlzc3VlRGF0YTogaXNzdWVEYXRhLFxuICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgIGVycm9yTWFwczogW1xuICAgICAgICAgICAgY3R4LmNvbW1vbi5jb250ZXh0dWFsRXJyb3JNYXAsIC8vIGNvbnRleHR1YWwgZXJyb3IgbWFwIGlzIGZpcnN0IHByaW9yaXR5XG4gICAgICAgICAgICBjdHguc2NoZW1hRXJyb3JNYXAsIC8vIHRoZW4gc2NoZW1hLWJvdW5kIG1hcCBpZiBhdmFpbGFibGVcbiAgICAgICAgICAgIG92ZXJyaWRlTWFwLCAvLyB0aGVuIGdsb2JhbCBvdmVycmlkZSBtYXBcbiAgICAgICAgICAgIG92ZXJyaWRlTWFwID09PSBkZWZhdWx0RXJyb3JNYXAgPyB1bmRlZmluZWQgOiBkZWZhdWx0RXJyb3JNYXAsIC8vIHRoZW4gZ2xvYmFsIGRlZmF1bHQgbWFwXG4gICAgICAgIF0uZmlsdGVyKCh4KSA9PiAhIXgpLFxuICAgIH0pO1xuICAgIGN0eC5jb21tb24uaXNzdWVzLnB1c2goaXNzdWUpO1xufVxuZXhwb3J0IGNsYXNzIFBhcnNlU3RhdHVzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IFwidmFsaWRcIjtcbiAgICB9XG4gICAgZGlydHkoKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlID09PSBcInZhbGlkXCIpXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gXCJkaXJ0eVwiO1xuICAgIH1cbiAgICBhYm9ydCgpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgIT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFwiYWJvcnRlZFwiO1xuICAgIH1cbiAgICBzdGF0aWMgbWVyZ2VBcnJheShzdGF0dXMsIHJlc3VsdHMpIHtcbiAgICAgICAgY29uc3QgYXJyYXlWYWx1ZSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHMgb2YgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKHMuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgIGlmIChzLnN0YXR1cyA9PT0gXCJkaXJ0eVwiKVxuICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgYXJyYXlWYWx1ZS5wdXNoKHMudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogYXJyYXlWYWx1ZSB9O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgbWVyZ2VPYmplY3RBc3luYyhzdGF0dXMsIHBhaXJzKSB7XG4gICAgICAgIGNvbnN0IHN5bmNQYWlycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgcGFpcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IHBhaXIua2V5O1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCBwYWlyLnZhbHVlO1xuICAgICAgICAgICAgc3luY1BhaXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQYXJzZVN0YXR1cy5tZXJnZU9iamVjdFN5bmMoc3RhdHVzLCBzeW5jUGFpcnMpO1xuICAgIH1cbiAgICBzdGF0aWMgbWVyZ2VPYmplY3RTeW5jKHN0YXR1cywgcGFpcnMpIHtcbiAgICAgICAgY29uc3QgZmluYWxPYmplY3QgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBwYWlyIG9mIHBhaXJzKSB7XG4gICAgICAgICAgICBjb25zdCB7IGtleSwgdmFsdWUgfSA9IHBhaXI7XG4gICAgICAgICAgICBpZiAoa2V5LnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICBpZiAodmFsdWUuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgIGlmIChrZXkuc3RhdHVzID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICBpZiAodmFsdWUuc3RhdHVzID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICBpZiAoa2V5LnZhbHVlICE9PSBcIl9fcHJvdG9fX1wiICYmICh0eXBlb2YgdmFsdWUudmFsdWUgIT09IFwidW5kZWZpbmVkXCIgfHwgcGFpci5hbHdheXNTZXQpKSB7XG4gICAgICAgICAgICAgICAgZmluYWxPYmplY3Rba2V5LnZhbHVlXSA9IHZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogZmluYWxPYmplY3QgfTtcbiAgICB9XG59XG5leHBvcnQgY29uc3QgSU5WQUxJRCA9IE9iamVjdC5mcmVlemUoe1xuICAgIHN0YXR1czogXCJhYm9ydGVkXCIsXG59KTtcbmV4cG9ydCBjb25zdCBESVJUWSA9ICh2YWx1ZSkgPT4gKHsgc3RhdHVzOiBcImRpcnR5XCIsIHZhbHVlIH0pO1xuZXhwb3J0IGNvbnN0IE9LID0gKHZhbHVlKSA9PiAoeyBzdGF0dXM6IFwidmFsaWRcIiwgdmFsdWUgfSk7XG5leHBvcnQgY29uc3QgaXNBYm9ydGVkID0gKHgpID0+IHguc3RhdHVzID09PSBcImFib3J0ZWRcIjtcbmV4cG9ydCBjb25zdCBpc0RpcnR5ID0gKHgpID0+IHguc3RhdHVzID09PSBcImRpcnR5XCI7XG5leHBvcnQgY29uc3QgaXNWYWxpZCA9ICh4KSA9PiB4LnN0YXR1cyA9PT0gXCJ2YWxpZFwiO1xuZXhwb3J0IGNvbnN0IGlzQXN5bmMgPSAoeCkgPT4gdHlwZW9mIFByb21pc2UgIT09IFwidW5kZWZpbmVkXCIgJiYgeCBpbnN0YW5jZW9mIFByb21pc2U7XG4iXSwibmFtZXMiOlsiZ2V0RXJyb3JNYXAiLCJkZWZhdWx0RXJyb3JNYXAiLCJtYWtlSXNzdWUiLCJwYXJhbXMiLCJkYXRhIiwicGF0aCIsImVycm9yTWFwcyIsImlzc3VlRGF0YSIsImZ1bGxQYXRoIiwiZnVsbElzc3VlIiwibWVzc2FnZSIsInVuZGVmaW5lZCIsImVycm9yTWVzc2FnZSIsIm1hcHMiLCJmaWx0ZXIiLCJtIiwic2xpY2UiLCJyZXZlcnNlIiwibWFwIiwiZGVmYXVsdEVycm9yIiwiRU1QVFlfUEFUSCIsImFkZElzc3VlVG9Db250ZXh0IiwiY3R4Iiwib3ZlcnJpZGVNYXAiLCJpc3N1ZSIsImNvbW1vbiIsImNvbnRleHR1YWxFcnJvck1hcCIsInNjaGVtYUVycm9yTWFwIiwieCIsImlzc3VlcyIsInB1c2giLCJQYXJzZVN0YXR1cyIsImNvbnN0cnVjdG9yIiwidmFsdWUiLCJkaXJ0eSIsImFib3J0IiwibWVyZ2VBcnJheSIsInN0YXR1cyIsInJlc3VsdHMiLCJhcnJheVZhbHVlIiwicyIsIklOVkFMSUQiLCJtZXJnZU9iamVjdEFzeW5jIiwicGFpcnMiLCJzeW5jUGFpcnMiLCJwYWlyIiwia2V5IiwibWVyZ2VPYmplY3RTeW5jIiwiZmluYWxPYmplY3QiLCJhbHdheXNTZXQiLCJPYmplY3QiLCJmcmVlemUiLCJESVJUWSIsIk9LIiwiaXNBYm9ydGVkIiwiaXNEaXJ0eSIsImlzVmFsaWQiLCJpc0FzeW5jIiwiUHJvbWlzZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/zod/v3/helpers/parseUtil.js\n"); /***/ }), /***/ "(action-browser)/./node_modules/zod/v3/helpers/typeAliases.js": /*!****************************************************!*\ !*** ./node_modules/zod/v3/helpers/typeAliases.js ***! \****************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.r(__webpack_exports__);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96b2QvdjMvaGVscGVycy90eXBlQWxpYXNlcy5qcyIsIm1hcHBpbmdzIjoiO0FBQVUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly93aGlza3ktdmF1bHQvLi9ub2RlX21vZHVsZXMvem9kL3YzL2hlbHBlcnMvdHlwZUFsaWFzZXMuanM/MzRkMCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge307XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/zod/v3/helpers/typeAliases.js\n"); /***/ }), /***/ "(action-browser)/./node_modules/zod/v3/helpers/util.js": /*!*********************************************!*\ !*** ./node_modules/zod/v3/helpers/util.js ***! \*********************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ZodParsedType: () => (/* binding */ ZodParsedType),\n/* harmony export */ getParsedType: () => (/* binding */ getParsedType),\n/* harmony export */ objectUtil: () => (/* binding */ objectUtil),\n/* harmony export */ util: () => (/* binding */ util)\n/* harmony export */ });\nvar util;\n(function(util) {\n util.assertEqual = (_)=>{};\n function assertIs(_arg) {}\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items)=>{\n const obj = {};\n for (const item of items){\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj)=>{\n const validKeys = util.objectKeys(obj).filter((k)=>typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys){\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj)=>{\n return util.objectKeys(obj).map(function(e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj)=>Object.keys(obj) // eslint-disable-line ban/ban\n : (object)=>{\n const keys = [];\n for(const key in object){\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker)=>{\n for (const item of arr){\n if (checker(item)) return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\" ? (val)=>Number.isInteger(val) // eslint-disable-line ban/ban\n : (val)=>typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val)=>typeof val === \"string\" ? `'${val}'` : val).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value)=>{\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nvar objectUtil;\n(function(objectUtil) {\n objectUtil.mergeShapes = (first, second)=>{\n return {\n ...first,\n ...second\n };\n };\n})(objectUtil || (objectUtil = {}));\nconst ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\"\n]);\nconst getParsedType = (data)=>{\n const t = typeof data;\n switch(t){\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96b2QvdjMvaGVscGVycy91dGlsLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBTyxJQUFJQSxLQUFLO0FBQ2YsVUFBVUEsSUFBSTtJQUNYQSxLQUFLQyxXQUFXLEdBQUcsQ0FBQ0MsS0FBUTtJQUM1QixTQUFTQyxTQUFTQyxJQUFJLEdBQUk7SUFDMUJKLEtBQUtHLFFBQVEsR0FBR0E7SUFDaEIsU0FBU0UsWUFBWUMsRUFBRTtRQUNuQixNQUFNLElBQUlDO0lBQ2Q7SUFDQVAsS0FBS0ssV0FBVyxHQUFHQTtJQUNuQkwsS0FBS1EsV0FBVyxHQUFHLENBQUNDO1FBQ2hCLE1BQU1DLE1BQU0sQ0FBQztRQUNiLEtBQUssTUFBTUMsUUFBUUYsTUFBTztZQUN0QkMsR0FBRyxDQUFDQyxLQUFLLEdBQUdBO1FBQ2hCO1FBQ0EsT0FBT0Q7SUFDWDtJQUNBVixLQUFLWSxrQkFBa0IsR0FBRyxDQUFDRjtRQUN2QixNQUFNRyxZQUFZYixLQUFLYyxVQUFVLENBQUNKLEtBQUtLLE1BQU0sQ0FBQyxDQUFDQyxJQUFNLE9BQU9OLEdBQUcsQ0FBQ0EsR0FBRyxDQUFDTSxFQUFFLENBQUMsS0FBSztRQUM1RSxNQUFNQyxXQUFXLENBQUM7UUFDbEIsS0FBSyxNQUFNRCxLQUFLSCxVQUFXO1lBQ3ZCSSxRQUFRLENBQUNELEVBQUUsR0FBR04sR0FBRyxDQUFDTSxFQUFFO1FBQ3hCO1FBQ0EsT0FBT2hCLEtBQUtrQixZQUFZLENBQUNEO0lBQzdCO0lBQ0FqQixLQUFLa0IsWUFBWSxHQUFHLENBQUNSO1FBQ2pCLE9BQU9WLEtBQUtjLFVBQVUsQ0FBQ0osS0FBS1MsR0FBRyxDQUFDLFNBQVVDLENBQUM7WUFDdkMsT0FBT1YsR0FBRyxDQUFDVSxFQUFFO1FBQ2pCO0lBQ0o7SUFDQXBCLEtBQUtjLFVBQVUsR0FBRyxPQUFPTyxPQUFPQyxJQUFJLEtBQUssV0FBVyw4QkFBOEI7T0FDNUUsQ0FBQ1osTUFBUVcsT0FBT0MsSUFBSSxDQUFDWixL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Z0JpQixLQUFLO2dCQUNuRCxPQUFPbkIsY0FBY29CLEdBQUc7WUFDNUI7WUFDQSxJQUFJLE9BQU9DLFNBQVMsZUFBZW5CLGdCQUFnQm1CLE1BQU07Z0JBQ3JELE9BQU9yQixjQUFjc0IsSUFBSTtZQUM3QjtZQUNBLE9BQU90QixjQUFjM0IsTUFBTTtRQUMvQjtZQUNJLE9BQU8yQixjQUFjdUIsT0FBTztJQUNwQztBQUNKLEVBQUUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly93aGlza3ktdmF1bHQvLi9ub2RlX21vZHVsZXMvem9kL3YzL2hlbHBlcnMvdXRpbC5qcz80NWNmIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB2YXIgdXRpbDtcbihmdW5jdGlvbiAodXRpbCkge1xuICAgIHV0aWwuYXNzZXJ0RXF1YWwgPSAoXykgPT4geyB9O1xuICAgIGZ1bmN0aW9uIGFzc2VydElzKF9hcmcpIHsgfVxuICAgIHV0aWwuYXNzZXJ0SXMgPSBhc3NlcnRJcztcbiAgICBmdW5jdGlvbiBhc3NlcnROZXZlcihfeCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICB9XG4gICAgdXRpbC5hc3NlcnROZXZlciA9IGFzc2VydE5ldmVyO1xuICAgIHV0aWwuYXJyYXlUb0VudW0gPSAoaXRlbXMpID0+IHtcbiAgICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgb2JqW2l0ZW1dID0gaXRlbTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH07XG4gICAgdXRpbC5nZXRWYWxpZEVudW1WYWx1ZXMgPSAob2JqKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbGlkS2V5cyA9IHV0aWwub2JqZWN0S2V5cyhvYmopLmZpbHRlcigoaykgPT4gdHlwZW9mIG9ialtvYmpba11dICE9PSBcIm51bWJlclwiKTtcbiAgICAgICAgY29uc3QgZmlsdGVyZWQgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBrIG9mIHZhbGlkS2V5cykge1xuICAgICAgICAgICAgZmlsdGVyZWRba10gPSBvYmpba107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHV0aWwub2JqZWN0VmFsdWVzKGZpbHRlcmVkKTtcbiAgICB9O1xuICAgIHV0aWwub2JqZWN0VmFsdWVzID0gKG9iaikgPT4ge1xuICAgICAgICByZXR1cm4gdXRpbC5vYmplY3RLZXlzKG9iaikubWFwKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqW2VdO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHV0aWwub2JqZWN0S2V5cyA9IHR5cGVvZiBPYmplY3Qua2V5cyA9PT0gXCJmdW5jdGlvblwiIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgYmFuL2JhblxuICAgICAgICA/IChvYmopID0+IE9iamVjdC5rZXlzKG9iaikgLy8gZXNsaW50LWRpc2FibGUtbGluZSBiYW4vYmFuXG4gICAgICAgIDogKG9iamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgICAgIH07XG4gICAgdXRpbC5maW5kID0gKGFyciwgY2hlY2tlcikgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyKSB7XG4gICAgICAgICAgICBpZiAoY2hlY2tlcihpdGVtKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgdXRpbC5pc0ludGVnZXIgPSB0eXBlb2YgTnVtYmVyLmlzSW50ZWdlciA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgID8gKHZhbCkgPT4gTnVtYmVyLmlzSW50ZWdlcih2YWwpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgYmFuL2JhblxuICAgICAgICA6ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIgJiYgTnVtYmVyLmlzRmluaXRlKHZhbCkgJiYgTWF0aC5mbG9vcih2YWwpID09PSB2YWw7XG4gICAgZnVuY3Rpb24gam9pblZhbHVlcyhhcnJheSwgc2VwYXJhdG9yID0gXCIgfCBcIikge1xuICAgICAgICByZXR1cm4gYXJyYXkubWFwKCh2YWwpID0+ICh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiID8gYCcke3ZhbH0nYCA6IHZhbCkpLmpvaW4oc2VwYXJhdG9yKTtcbiAgICB9XG4gICAgdXRpbC5qb2luVmFsdWVzID0gam9pblZhbHVlcztcbiAgICB1dGlsLmpzb25TdHJpbmdpZnlSZXBsYWNlciA9IChfLCB2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcImJpZ2ludFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbn0pKHV0aWwgfHwgKHV0aWwgPSB7fSkpO1xuZXhwb3J0IHZhciBvYmplY3RVdGlsO1xuKGZ1bmN0aW9uIChvYmplY3RVdGlsKSB7XG4gICAgb2JqZWN0VXRpbC5tZXJnZVNoYXBlcyA9IChmaXJzdCwgc2Vjb25kKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5maXJzdCxcbiAgICAgICAgICAgIC4uLnNlY29uZCwgLy8gc2Vjb25kIG92ZXJ3cml0ZXMgZmlyc3RcbiAgICAgICAgfTtcbiAgICB9O1xufSkob2JqZWN0VXRpbCB8fCAob2JqZWN0VXRpbCA9IHt9KSk7XG5leHBvcnQgY29uc3QgWm9kUGFyc2VkVHlwZSA9IHV0aWwuYXJyYXlUb0VudW0oW1xuICAgIFwic3RyaW5nXCIsXG4gICAgXCJuYW5cIixcbiAgICBcIm51bWJlclwiLFxuICAgIFwiaW50ZWdlclwiLFxuICAgIFwiZmxvYXRcIixcbiAgICBcImJvb2xlYW5cIixcbiAgICBcImRhdGVcIixcbiAgICBcImJpZ2ludFwiLFxuICAgIFwic3ltYm9sXCIsXG4gICAgXCJmdW5jdGlvblwiLFxuICAgIFwidW5kZWZpbmVkXCIsXG4gICAgXCJudWxsXCIsXG4gICAgXCJhcnJheVwiLFxuICAgIFwib2JqZWN0XCIsXG4gICAgXCJ1bmtub3duXCIsXG4gICAgXCJwcm9taXNlXCIsXG4gICAgXCJ2b2lkXCIsXG4gICAgXCJuZXZlclwiLFxuICAgIFwibWFwXCIsXG4gICAgXCJzZXRcIixcbl0pO1xuZXhwb3J0IGNvbnN0IGdldFBhcnNlZFR5cGUgPSAoZGF0YSkgPT4ge1xuICAgIGNvbnN0IHQgPSB0eXBlb2YgZGF0YTtcbiAgICBzd2l0Y2ggKHQpIHtcbiAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUudW5kZWZpbmVkO1xuICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5zdHJpbmc7XG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIuaXNOYU4oZGF0YSkgPyBab2RQYXJzZWRUeXBlLm5hbiA6IFpvZFBhcnNlZFR5cGUubnVtYmVyO1xuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUuYm9vbGVhbjtcbiAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5mdW5jdGlvbjtcbiAgICAgICAgY2FzZSBcImJpZ2ludFwiOlxuICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUuYmlnaW50O1xuICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5zeW1ib2w7XG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUuYXJyYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLm51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS50aGVuICYmIHR5cGVvZiBkYXRhLnRoZW4gPT09IFwiZnVuY3Rpb25cIiAmJiBkYXRhLmNhdGNoICYmIHR5cGVvZiBkYXRhLmNhdGNoID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5wcm9taXNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBNYXAgIT09IFwidW5kZWZpbmVkXCIgJiYgZGF0YSBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLm1hcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgU2V0ICE9PSBcInVuZGVmaW5lZFwiICYmIGRhdGEgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5zZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIERhdGUgIT09IFwidW5kZWZpbmVkXCIgJiYgZGF0YSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5kYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUub2JqZWN0O1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUudW5rbm93bjtcbiAgICB9XG59O1xuIl0sIm5hbWVzIjpbInV0aWwiLCJhc3NlcnRFcXVhbCIsIl8iLCJhc3NlcnRJcyIsIl9hcmciLCJhc3NlcnROZXZlciIsIl94IiwiRXJyb3IiLCJhcnJheVRvRW51bSIsIml0ZW1zIiwib2JqIiwiaXRlbSIsImdldFZhbGlkRW51bVZhbHVlcyIsInZhbGlkS2V5cyIsIm9iamVjdEtleXMiLCJmaWx0ZXIiLCJrIiwiZmlsdGVyZWQiLCJvYmplY3RWYWx1ZXMiLCJtYXAiLCJlIiwiT2JqZWN0Iiwia2V5cyIsIm9iamVjdCIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInB1c2giLCJmaW5kIiwiYXJyIiwiY2hlY2tlciIsInVuZGVmaW5lZCIsImlzSW50ZWdlciIsIk51bWJlciIsInZhbCIsImlzRmluaXRlIiwiTWF0aCIsImZsb29yIiwiam9pblZhbHVlcyIsImFycmF5Iiwic2VwYXJhdG9yIiwiam9pbiIsImpzb25TdHJpbmdpZnlSZXBsYWNlciIsInZhbHVlIiwidG9TdHJpbmciLCJvYmplY3RVdGlsIiwibWVyZ2VTaGFwZXMiLCJmaXJzdCIsInNlY29uZCIsIlpvZFBhcnNlZFR5cGUiLCJnZXRQYXJzZWRUeXBlIiwiZGF0YSIsInQiLCJzdHJpbmciLCJpc05hTiIsIm5hbiIsIm51bWJlciIsImJvb2xlYW4iLCJmdW5jdGlvbiIsImJpZ2ludCIsInN5bWJvbCIsIkFycmF5IiwiaXNBcnJheSIsIm51bGwiLCJ0aGVuIiwiY2F0Y2giLCJwcm9taXNlIiwiTWFwIiwiU2V0Iiwic2V0IiwiRGF0ZSIsImRhdGUiLCJ1bmtub3duIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/zod/v3/helpers/util.js\n"); /***/ }), /***/ "(action-browser)/./node_modules/zod/v3/locales/en.js": /*!*******************************************!*\ !*** ./node_modules/zod/v3/locales/en.js ***! \*******************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _ZodError_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../ZodError.js */ \"(action-browser)/./node_modules/zod/v3/ZodError.js\");\n/* harmony import */ var _helpers_util_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/util.js */ \"(action-browser)/./node_modules/zod/v3/helpers/util.js\");\n\n\nconst errorMap = (issue, _ctx)=>{\n let message;\n switch(issue.code){\n case _ZodError_js__WEBPACK_IMPORTED_MODULE_0__.ZodIssueCode.invalid_type:\n if (issue.received === _helpers_util_js__WEBPACK_IMPORTED_MODULE_1__.ZodParsedType.undefined) {\n message = \"Required\";\n } else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case _ZodError_js__WEBPACK_IMPORTED_MODULE_0__.ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, _helpers_util_js__WEBPACK_IMPORTED_MODULE_1__.util.jsonStringifyReplacer)}`;\n break;\n case _ZodError_js__WEBPACK_IMPORTED_MODULE_0__.ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${_helpers_util_js__WEBPACK_IMPORTED_MODULE_1__.util.joinValues(issue.keys, \", \")}`;\n break;\n case _ZodError_js__WEBPACK_IMPORTED_MODULE_0__.ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case _ZodError_js__WEBPACK_IMPORTED_MODULE_0__.ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${_helpers_util_js__WEBPACK_IMPORTED_MODULE_1__.util.joinValues(issue.options)}`;\n break;\n case _ZodError_js__WEBPACK_IMPORTED_MODULE_0__.ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${_helpers_util_js__WEBPACK_IMPORTED_MODULE_1__.util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case _ZodError_js__WEBPACK_IMPORTED_MODULE_0__.ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case _ZodError_js__WEBPACK_IMPORTED_MODULE_0__.ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case _ZodError_js__WEBPACK_IMPORTED_MODULE_0__.ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case _ZodError_js__WEBPACK_IMPORTED_MODULE_0__.ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n } else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n } else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n } else {\n _helpers_util_js__WEBPACK_IMPORTED_MODULE_1__.util.assertNever(issue.validation);\n }\n } else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n } else {\n message = \"Invalid\";\n }\n break;\n case _ZodError_js__WEBPACK_IMPORTED_MODULE_0__.ZodIssueCode.too_small:\n if (issue.type === \"array\") message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\") message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\") message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\") message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\") message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else message = \"Invalid input\";\n break;\n case _ZodError_js__WEBPACK_IMPORTED_MODULE_0__.ZodIssueCode.too_big:\n if (issue.type === \"array\") message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\") message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\") message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\") message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\") message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else message = \"Invalid input\";\n break;\n case _ZodError_js__WEBPACK_IMPORTED_MODULE_0__.ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case _ZodError_js__WEBPACK_IMPORTED_MODULE_0__.ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case _ZodError_js__WEBPACK_IMPORTED_MODULE_0__.ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case _ZodError_js__WEBPACK_IMPORTED_MODULE_0__.ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n _helpers_util_js__WEBPACK_IMPORTED_MODULE_1__.util.assertNever(issue);\n }\n return {\n message\n };\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (errorMap);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96b2QvdjMvbG9jYWxlcy9lbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBOEM7QUFDVztBQUN6RCxNQUFNRyxXQUFXLENBQUNDLE9BQU9DO0lBQ3JCLElBQUlDO0lBQ0osT0FBUUYsTUFBTUcsSUFBSTtRQUNkLEtBQUtQLHNEQUFZQSxDQUFDUSxZQUFZO1lBQzFCLElBQUlKLE1BQU1LLFFBQVEsS0FBS1AsMkRBQWFBLENBQUNRLFNBQVMsRUFBRTtnQkFDNUNKLFVBQVU7WUFDZCxPQUNLO2dCQUNEQSxVQUFVLENBQUMsU0FBUyxFQUFFRixNQUFNTyxRQUFRLENBQUMsV0FBVyxFQUFFUCxNQUFNSyxRQUFRLENBQUMsQ0FBQztZQUN0RTtZQUNBO1FBQ0osS0FBS1Qsc0RBQVlBLENBQUNZLGVBQWU7WUFDN0JOLFVBQVUsQ0FBQyxnQ0FBZ0MsRUFBRU8sS0FBS0MsU0FBUyxDQUFDVixNQUFNTyxRQUFRLEVBQUVWLGtEQUFJQSxDQUFDYyxxQkFBcUIsRUFBRSxDQUFDO1lBQ3pHO1FBQ0osS0FBS2Ysc0RBQVlBLENBQUNnQixpQkFBaUI7WUFDL0JWLFVBQVUsQ0FBQywrQkFBK0IsRUFBRUwsa0RBQUlBLENBQUNnQixVQUFVLENBQUNiLE1BQU1jLElBQUksRUFBRSxNQUFNLENBQUM7WUFDL0U7UUFDSixLQUFLbEIsc0RBQVlBLENBQUNtQixhQUFhO1lBQzNCYixVQUFVLENBQUMsYUFBYSxDQUFDO1lBQ3pCO1FBQ0osS0FBS04sc0RBQVlBLENBQUNvQiwyQkFBMkI7WUFDekNkLFVBQVUsQ0FBQyxzQ0FBc0MsRUFBRUwsa0RBQUlBLENBQUNnQixVQUFVLENBQUNiLE1BQU1pQixPQUFPLEVBQUUsQ0FBQztZQUNuRjtRQUNKLEtBQUtyQixzREFBWUEsQ0FBQ3NCLGtCQUFrQjtZQUNoQ2hCLFVBQVUsQ0FBQyw2QkFBNkIsRUFBRUwsa0RBQUlBLENBQUNnQixVQUFVLENBQUNiLE1BQU1pQixPQUFPLEVBQUUsWUFBWSxFQUFF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LEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUVoQyxNQUFNcUMsT0FBTyxDQUFDLENBQUM7aUJBQy9ILElBQUlyQyxNQUFNOEIsSUFBSSxLQUFLLFFBQ3BCNUIsVUFBVSxDQUFDLGFBQWEsRUFBRUYsTUFBTStCLEtBQUssR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHL0IsTUFBTWdDLFNBQVMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSUUsS0FBS0MsT0FBT25DLE1BQU1xQyxPQUFPLEdBQUcsQ0FBQztpQkFFdEpuQyxVQUFVO1lBQ2Q7UUFDSixLQUFLTixzREFBWUEsQ0FBQzBDLE1BQU07WUFDcEJwQyxVQUFVLENBQUMsYUFBYSxDQUFDO1lBQ3pCO1FBQ0osS0FBS04sc0RBQVlBLENBQUMyQywwQkFBMEI7WUFDeENyQyxVQUFVLENBQUMsd0NBQXdDLENBQUM7WUFDcEQ7UUFDSixLQUFLTixzREFBWUEsQ0FBQzRDLGVBQWU7WUFDN0J0QyxVQUFVLENBQUMsNkJBQTZCLEVBQUVGLE1BQU15QyxVQUFVLENBQUMsQ0FBQztZQUM1RDtRQUNKLEtBQUs3QyxzREFBWUEsQ0FBQzhDLFVBQVU7WUFDeEJ4QyxVQUFVO1lBQ1Y7UUFDSjtZQUNJQSxVQUFVRCxLQUFLMEMsWUFBWTtZQUMzQjlDLGtEQUFJQSxDQUFDK0IsV0FBVyxDQUFDNUI7SUFDekI7SUFDQSxPQUFPO1FBQUVFO0lBQVE7QUFDckI7QUFDQSxpRUFBZUgsUUFBUUEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL3doaXNreS12YXVsdC8uL25vZGVfbW9kdWxlcy96b2QvdjMvbG9jYWxlcy9lbi5qcz8xM2ZmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFpvZElzc3VlQ29kZSB9IGZyb20gXCIuLi9ab2RFcnJvci5qc1wiO1xuaW1wb3J0IHsgdXRpbCwgWm9kUGFyc2VkVHlwZSB9IGZyb20gXCIuLi9oZWxwZXJzL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yTWFwID0gKGlzc3VlLCBfY3R4KSA9PiB7XG4gICAgbGV0IG1lc3NhZ2U7XG4gICAgc3dpdGNoIChpc3N1ZS5jb2RlKSB7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZTpcbiAgICAgICAgICAgIGlmIChpc3N1ZS5yZWNlaXZlZCA9PT0gWm9kUGFyc2VkVHlwZS51bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gXCJSZXF1aXJlZFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBFeHBlY3RlZCAke2lzc3VlLmV4cGVjdGVkfSwgcmVjZWl2ZWQgJHtpc3N1ZS5yZWNlaXZlZH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfbGl0ZXJhbDpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBsaXRlcmFsIHZhbHVlLCBleHBlY3RlZCAke0pTT04uc3RyaW5naWZ5KGlzc3VlLmV4cGVjdGVkLCB1dGlsLmpzb25TdHJpbmdpZnlSZXBsYWNlcil9YDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS51bnJlY29nbml6ZWRfa2V5czpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgVW5yZWNvZ25pemVkIGtleShzKSBpbiBvYmplY3Q6ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5pbnZhbGlkX3VuaW9uOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGlucHV0YDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5pbnZhbGlkX3VuaW9uX2Rpc2NyaW1pbmF0b3I6XG4gICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgZGlzY3JpbWluYXRvciB2YWx1ZS4gRXhwZWN0ZWQgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUub3B0aW9ucyl9YDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5pbnZhbGlkX2VudW1fdmFsdWU6XG4gICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgZW51bSB2YWx1ZS4gRXhwZWN0ZWQgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUub3B0aW9ucyl9LCByZWNlaXZlZCAnJHtpc3N1ZS5yZWNlaXZlZH0nYDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5pbnZhbGlkX2FyZ3VtZW50czpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBmdW5jdGlvbiBhcmd1bWVudHNgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfcmV0dXJuX3R5cGU6XG4gICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgZnVuY3Rpb24gcmV0dXJuIHR5cGVgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfZGF0ZTpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBkYXRlYDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZzpcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaXNzdWUudmFsaWRhdGlvbiA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIGlmIChcImluY2x1ZGVzXCIgaW4gaXNzdWUudmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgaW5wdXQ6IG11c3QgaW5jbHVkZSBcIiR7aXNzdWUudmFsaWRhdGlvbi5pbmNsdWRlc31cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXNzdWUudmFsaWRhdGlvbi5wb3NpdGlvbiA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IGAke21lc3NhZ2V9IGF0IG9uZSBvciBtb3JlIHBvc2l0aW9ucyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJHtpc3N1ZS52YWxpZGF0aW9uLnBvc2l0aW9ufWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoXCJzdGFydHNXaXRoXCIgaW4gaXNzdWUudmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgaW5wdXQ6IG11c3Qgc3RhcnQgd2l0aCBcIiR7aXNzdWUudmFsaWRhdGlvbi5zdGFydHNXaXRofVwiYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoXCJlbmRzV2l0aFwiIGluIGlzc3VlLnZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGlucHV0OiBtdXN0IGVuZCB3aXRoIFwiJHtpc3N1ZS52YWxpZGF0aW9uLmVuZHNXaXRofVwiYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHV0aWwuYXNzZXJ0TmV2ZXIoaXNzdWUudmFsaWRhdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUudmFsaWRhdGlvbiAhPT0gXCJyZWdleFwiKSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkICR7aXNzdWUudmFsaWRhdGlvbn1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IFwiSW52YWxpZFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLnRvb19zbWFsbDpcbiAgICAgICAgICAgIGlmIChpc3N1ZS50eXBlID09PSBcImFycmF5XCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBBcnJheSBtdXN0IGNvbnRhaW4gJHtpc3N1ZS5leGFjdCA/IFwiZXhhY3RseVwiIDogaXNzdWUuaW5jbHVzaXZlID8gYGF0IGxlYXN0YCA6IGBtb3JlIHRoYW5gfSAke2lzc3VlLm1pbmltdW19IGVsZW1lbnQocylgO1xuICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUudHlwZSA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYFN0cmluZyBtdXN0IGNvbnRhaW4gJHtpc3N1ZS5leGFjdCA/IFwiZXhhY3RseVwiIDogaXNzdWUuaW5jbHVzaXZlID8gYGF0IGxlYXN0YCA6IGBvdmVyYH0gJHtpc3N1ZS5taW5pbXVtfSBjaGFyYWN0ZXIocylgO1xuICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUudHlwZSA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYE51bWJlciBtdXN0IGJlICR7aXNzdWUuZXhhY3QgPyBgZXhhY3RseSBlcXVhbCB0byBgIDogaXNzdWUuaW5jbHVzaXZlID8gYGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgIDogYGdyZWF0ZXIgdGhhbiBgfSR7aXNzdWUubWluaW11bX1gO1xuICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUudHlwZSA9PT0gXCJiaWdpbnRcIilcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYE51bWJlciBtdXN0IGJlICR7aXNzdWUuZXhhY3QgPyBgZXhhY3RseSBlcXVhbCB0byBgIDogaXNzdWUuaW5jbHVzaXZlID8gYGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgIDogYGdyZWF0ZXIgdGhhbiBgfSR7aXNzdWUubWluaW11bX1gO1xuICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUudHlwZSA9PT0gXCJkYXRlXCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBEYXRlIG11c3QgYmUgJHtpc3N1ZS5leGFjdCA/IGBleGFjdGx5IGVxdWFsIHRvIGAgOiBpc3N1ZS5pbmNsdXNpdmUgPyBgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGAgOiBgZ3JlYXRlciB0aGFuIGB9JHtuZXcgRGF0ZShOdW1iZXIoaXNzdWUubWluaW11bSkpfWA7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLnRvb19iaWc6XG4gICAgICAgICAgICBpZiAoaXNzdWUudHlwZSA9PT0gXCJhcnJheVwiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgQXJyYXkgbXVzdCBjb250YWluICR7aXNzdWUuZXhhY3QgPyBgZXhhY3RseWAgOiBpc3N1ZS5pbmNsdXNpdmUgPyBgYXQgbW9zdGAgOiBgbGVzcyB0aGFuYH0gJHtpc3N1ZS5tYXhpbXVtfSBlbGVtZW50KHMpYDtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLnR5cGUgPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBTdHJpbmcgbXVzdCBjb250YWluICR7aXNzdWUuZXhhY3QgPyBgZXhhY3RseWAgOiBpc3N1ZS5pbmNsdXNpdmUgPyBgYXQgbW9zdGAgOiBgdW5kZXJgfSAke2lzc3VlLm1heGltdW19IGNoYXJhY3RlcihzKWA7XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS50eXBlID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgTnVtYmVyIG11c3QgYmUgJHtpc3N1ZS5leGFjdCA/IGBleGFjdGx5YCA6IGlzc3VlLmluY2x1c2l2ZSA/IGBsZXNzIHRoYW4gb3IgZXF1YWwgdG9gIDogYGxlc3MgdGhhbmB9ICR7aXNzdWUubWF4aW11bX1gO1xuICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUudHlwZSA9PT0gXCJiaWdpbnRcIilcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYEJpZ0ludCBtdXN0IGJlICR7aXNzdWUuZXhhY3QgPyBgZXhhY3RseWAgOiBpc3N1ZS5pbmNsdXNpdmUgPyBgbGVzcyB0aGFuIG9yIGVxdWFsIHRvYCA6IGBsZXNzIHRoYW5gfSAke2lzc3VlLm1heGltdW19YDtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLnR5cGUgPT09IFwiZGF0ZVwiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgRGF0ZSBtdXN0IGJlICR7aXNzdWUuZXhhY3QgPyBgZXhhY3RseWAgOiBpc3N1ZS5pbmNsdXNpdmUgPyBgc21hbGxlciB0aGFuIG9yIGVxdWFsIHRvYCA6IGBzbWFsbGVyIHRoYW5gfSAke25ldyBEYXRlKE51bWJlcihpc3N1ZS5tYXhpbXVtKSl9YDtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0XCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuY3VzdG9tOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGlucHV0YDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5pbnZhbGlkX2ludGVyc2VjdGlvbl90eXBlczpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW50ZXJzZWN0aW9uIHJlc3VsdHMgY291bGQgbm90IGJlIG1lcmdlZGA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUubm90X211bHRpcGxlX29mOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBOdW1iZXIgbXVzdCBiZSBhIG11bHRpcGxlIG9mICR7aXNzdWUubXVsdGlwbGVPZn1gO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLm5vdF9maW5pdGU6XG4gICAgICAgICAgICBtZXNzYWdlID0gXCJOdW1iZXIgbXVzdCBiZSBmaW5pdGVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgbWVzc2FnZSA9IF9jdHguZGVmYXVsdEVycm9yO1xuICAgICAgICAgICAgdXRpbC5hc3NlcnROZXZlcihpc3N1ZSk7XG4gICAgfVxuICAgIHJldHVybiB7IG1lc3NhZ2UgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBlcnJvck1hcDtcbiJdLCJuYW1lcyI6WyJab2RJc3N1ZUNvZGUiLCJ1dGlsIiwiWm9kUGFyc2VkVHlwZSIsImVycm9yTWFwIiwiaXNzdWUiLCJfY3R4IiwibWVzc2FnZSIsImNvZGUiLCJpbnZhbGlkX3R5cGUiLCJyZWNlaXZlZCIsInVuZGVmaW5lZCIsImV4cGVjdGVkIiwiaW52YWxpZF9saXRlcmFsIiwiSlNPTiIsInN0cmluZ2lmeSIsImpzb25TdHJpbmdpZnlSZXBsYWNlciIsInVucmVjb2duaXplZF9rZXlzIiwiam9pblZhbHVlcyIsImtleXMiLCJpbnZhbGlkX3VuaW9uIiwiaW52YWxpZF91bmlvbl9kaXNjcmltaW5hdG9yIiwib3B0aW9ucyIsImludmFsaWRfZW51bV92YWx1ZSIsImludmFsaWRfYXJndW1lbnRzIiwiaW52YWxpZF9yZXR1cm5fdHlwZSIsImludmFsaWRfZGF0ZSIsImludmFsaWRfc3RyaW5nIiwidmFsaWRhdGlvbiIsImluY2x1ZGVzIiwicG9zaXRpb24iLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJhc3NlcnROZXZlciIsInRvb19zbWFsbCIsInR5cGUiLCJleGFjdCIsImluY2x1c2l2ZSIsIm1pbmltdW0iLCJEYXRlIiwiTnVtYmVyIiwidG9vX2JpZyIsIm1heGltdW0iLCJjdXN0b20iLCJpbnZhbGlkX2ludGVyc2VjdGlvbl90eXBlcyIsIm5vdF9tdWx0aXBsZV9vZiIsIm11bHRpcGxlT2YiLCJub3RfZmluaXRlIiwiZGVmYXVsdEVycm9yIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/zod/v3/locales/en.js\n"); /***/ }), /***/ "(action-browser)/./node_modules/zod/v3/types.js": /*!**************************************!*\ !*** ./node_modules/zod/v3/types.js ***! \**************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BRAND: () => (/* binding */ BRAND),\n/* harmony export */ NEVER: () => (/* binding */ NEVER),\n/* harmony export */ Schema: () => (/* binding */ ZodType),\n/* harmony export */ ZodAny: () => (/* binding */ ZodAny),\n/* harmony export */ ZodArray: () => (/* binding */ ZodArray),\n/* harmony export */ ZodBigInt: () => (/* binding */ ZodBigInt),\n/* harmony export */ ZodBoolean: () => (/* binding */ ZodBoolean),\n/* harmony export */ ZodBranded: () => (/* binding */ ZodBranded),\n/* harmony export */ ZodCatch: () => (/* binding */ ZodCatch),\n/* harmony export */ ZodDate: () => (/* binding */ ZodDate),\n/* harmony export */ ZodDefault: () => (/* binding */ ZodDefault),\n/* harmony export */ ZodDiscriminatedUnion: () => (/* binding */ ZodDiscriminatedUnion),\n/* harmony export */ ZodEffects: () => (/* binding */ ZodEffects),\n/* harmony export */ ZodEnum: () => (/* binding */ ZodEnum),\n/* harmony export */ ZodFirstPartyTypeKind: () => (/* binding */ ZodFirstPartyTypeKind),\n/* harmony export */ ZodFunction: () => (/* binding */ ZodFunction),\n/* harmony export */ ZodIntersection: () => (/* binding */ ZodIntersection),\n/* harmony export */ ZodLazy: () => (/* binding */ ZodLazy),\n/* harmony export */ ZodLiteral: () => (/* binding */ ZodLiteral),\n/* harmony export */ ZodMap: () => (/* binding */ ZodMap),\n/* harmony export */ ZodNaN: () => (/* binding */ ZodNaN),\n/* harmony export */ ZodNativeEnum: () => (/* binding */ ZodNativeEnum),\n/* harmony export */ ZodNever: () => (/* binding */ ZodNever),\n/* harmony export */ ZodNull: () => (/* binding */ ZodNull),\n/* harmony export */ ZodNullable: () => (/* binding */ ZodNullable),\n/* harmony export */ ZodNumber: () => (/* binding */ ZodNumber),\n/* harmony export */ ZodObject: () => (/* binding */ ZodObject),\n/* harmony export */ ZodOptional: () => (/* binding */ ZodOptional),\n/* harmony export */ ZodPipeline: () => (/* binding */ ZodPipeline),\n/* harmony export */ ZodPromise: () => (/* binding */ ZodPromise),\n/* harmony export */ ZodReadonly: () => (/* binding */ ZodReadonly),\n/* harmony export */ ZodRecord: () => (/* binding */ ZodRecord),\n/* harmony export */ ZodSchema: () => (/* binding */ ZodType),\n/* harmony export */ ZodSet: () => (/* binding */ ZodSet),\n/* harmony export */ ZodString: () => (/* binding */ ZodString),\n/* harmony export */ ZodSymbol: () => (/* binding */ ZodSymbol),\n/* harmony export */ ZodTransformer: () => (/* binding */ ZodEffects),\n/* harmony export */ ZodTuple: () => (/* binding */ ZodTuple),\n/* harmony export */ ZodType: () => (/* binding */ ZodType),\n/* harmony export */ ZodUndefined: () => (/* binding */ ZodUndefined),\n/* harmony export */ ZodUnion: () => (/* binding */ ZodUnion),\n/* harmony export */ ZodUnknown: () => (/* binding */ ZodUnknown),\n/* harmony export */ ZodVoid: () => (/* binding */ ZodVoid),\n/* harmony export */ any: () => (/* binding */ anyType),\n/* harmony export */ array: () => (/* binding */ arrayType),\n/* harmony export */ bigint: () => (/* binding */ bigIntType),\n/* harmony export */ boolean: () => (/* binding */ booleanType),\n/* harmony export */ coerce: () => (/* binding */ coerce),\n/* harmony export */ custom: () => (/* binding */ custom),\n/* harmony export */ date: () => (/* binding */ dateType),\n/* harmony export */ datetimeRegex: () => (/* binding */ datetimeRegex),\n/* harmony export */ discriminatedUnion: () => (/* binding */ discriminatedUnionType),\n/* harmony export */ effect: () => (/* binding */ effectsType),\n/* harmony export */ \"enum\": () => (/* binding */ enumType),\n/* harmony export */ \"function\": () => (/* binding */ functionType),\n/* harmony export */ \"instanceof\": () => (/* binding */ instanceOfType),\n/* harmony export */ intersection: () => (/* binding */ intersectionType),\n/* harmony export */ late: () => (/* binding */ late),\n/* harmony export */ lazy: () => (/* binding */ lazyType),\n/* harmony export */ literal: () => (/* binding */ literalType),\n/* harmony export */ map: () => (/* binding */ mapType),\n/* harmony export */ nan: () => (/* binding */ nanType),\n/* harmony export */ nativeEnum: () => (/* binding */ nativeEnumType),\n/* harmony export */ never: () => (/* binding */ neverType),\n/* harmony export */ \"null\": () => (/* binding */ nullType),\n/* harmony export */ nullable: () => (/* binding */ nullableType),\n/* harmony export */ number: () => (/* binding */ numberType),\n/* harmony export */ object: () => (/* binding */ objectType),\n/* harmony export */ oboolean: () => (/* binding */ oboolean),\n/* harmony export */ onumber: () => (/* binding */ onumber),\n/* harmony export */ optional: () => (/* binding */ optionalType),\n/* harmony export */ ostring: () => (/* binding */ ostring),\n/* harmony export */ pipeline: () => (/* binding */ pipelineType),\n/* harmony export */ preprocess: () => (/* binding */ preprocessType),\n/* harmony export */ promise: () => (/* binding */ promiseType),\n/* harmony export */ record: () => (/* binding */ recordType),\n/* harmony export */ set: () => (/* binding */ setType),\n/* harmony export */ strictObject: () => (/* binding */ strictObjectType),\n/* harmony export */ string: () => (/* binding */ stringType),\n/* harmony export */ symbol: () => (/* binding */ symbolType),\n/* harmony export */ transformer: () => (/* binding */ effectsType),\n/* harmony export */ tuple: () => (/* binding */ tupleType),\n/* harmony export */ undefined: () => (/* binding */ undefinedType),\n/* harmony export */ union: () => (/* binding */ unionType),\n/* harmony export */ unknown: () => (/* binding */ unknownType),\n/* harmony export */ \"void\": () => (/* binding */ voidType)\n/* harmony export */ });\n/* harmony import */ var _ZodError_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ZodError.js */ \"(action-browser)/./node_modules/zod/v3/ZodError.js\");\n/* harmony import */ var _errors_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./errors.js */ \"(action-browser)/./node_modules/zod/v3/errors.js\");\n/* harmony import */ var _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers/errorUtil.js */ \"(action-browser)/./node_modules/zod/v3/helpers/errorUtil.js\");\n/* harmony import */ var _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers/parseUtil.js */ \"(action-browser)/./node_modules/zod/v3/helpers/parseUtil.js\");\n/* harmony import */ var _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers/util.js */ \"(action-browser)/./node_modules/zod/v3/helpers/util.js\");\n\n\n\n\n\nclass ParseInputLazyPath {\n constructor(parent, value, path, key){\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n } else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result)=>{\n if ((0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.isValid)(result)) {\n return {\n success: true,\n data: result.value\n };\n } else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error () {\n if (this._error) return this._error;\n const error = new _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n }\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params) return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap) return {\n errorMap: errorMap,\n description\n };\n const customMap = (iss, ctx)=>{\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return {\n message: message ?? ctx.defaultError\n };\n }\n if (typeof ctx.data === \"undefined\") {\n return {\n message: message ?? required_error ?? ctx.defaultError\n };\n }\n if (iss.code !== \"invalid_type\") return {\n message: ctx.defaultError\n };\n return {\n message: message ?? invalid_type_error ?? ctx.defaultError\n };\n };\n return {\n errorMap: customMap,\n description\n };\n}\nclass ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return (0,_helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.getParsedType)(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: (0,_helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.getParsedType)(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent\n };\n }\n _processInputParams(input) {\n return {\n status: new _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: (0,_helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.getParsedType)(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent\n }\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if ((0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.isAsync)(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success) return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: (0,_helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.getParsedType)(data)\n };\n const result = this._parseSync({\n data,\n path: ctx.path,\n parent: ctx\n });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: (0,_helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.getParsedType)(data)\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({\n data,\n path: [],\n parent: ctx\n });\n return (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.isValid)(result) ? {\n value: result.value\n } : {\n issues: ctx.common.issues\n };\n } catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true\n };\n }\n }\n return this._parseAsync({\n data,\n path: [],\n parent: ctx\n }).then((result)=>(0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.isValid)(result) ? {\n value: result.value\n } : {\n issues: ctx.common.issues\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success) return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: (0,_helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.getParsedType)(data)\n };\n const maybeAsyncResult = this._parse({\n data,\n path: ctx.path,\n parent: ctx\n });\n const result = await ((0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.isAsync)(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val)=>{\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return {\n message\n };\n } else if (typeof message === \"function\") {\n return message(val);\n } else {\n return message;\n }\n };\n return this._refinement((val, ctx)=>{\n const result = check(val);\n const setError = ()=>ctx.addIssue({\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.custom,\n ...getIssueProperties(val)\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data)=>{\n if (!data) {\n setError();\n return false;\n } else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n } else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx)=>{\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n } else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: {\n type: \"refinement\",\n refinement\n }\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def){\n /** Alias of safeParseAsync */ this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data)=>this[\"~validate\"](data)\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([\n this,\n option\n ], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: {\n type: \"transform\",\n transform\n }\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : ()=>def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def)\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : ()=>def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[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;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?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)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?: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])$/;\nconst ipv4CidrRegex = /^(?:(?: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])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([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]))$/;\nconst ipv6CidrRegex = /^(([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])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\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])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n } else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nfunction datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset) opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt)) return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header) return false;\n // Convert base64url to base64\n const base64 = header.replace(/-/g, \"+\").replace(/_/g, \"/\").padEnd(header.length + (4 - header.length % 4) % 4, \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null) return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\") return false;\n if (!decoded.alg) return false;\n if (alg && decoded.alg !== alg) return false;\n return true;\n } catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nclass ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_type,\n expected: _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.string,\n received: ctx.parsedType\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n const status = new _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks){\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message\n });\n } else if (tooSmall) {\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message\n });\n }\n status.dirty();\n }\n } else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n validation: \"email\",\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n validation: \"emoji\",\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n validation: \"uuid\",\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n validation: \"nanoid\",\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n validation: \"cuid\",\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n validation: \"cuid2\",\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n validation: \"ulid\",\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n } catch {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n validation: \"url\",\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n validation: \"regex\",\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n } else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_string,\n validation: {\n includes: check.value,\n position: check.position\n },\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n } else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n } else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_string,\n validation: {\n startsWith: check.value\n },\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_string,\n validation: {\n endsWith: check.value\n },\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n validation: \"duration\",\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n validation: \"ip\",\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n validation: \"jwt\",\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n validation: \"cidr\",\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n validation: \"base64\",\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n validation: \"base64url\",\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_string,\n message: check.message\n });\n status.dirty();\n }\n } else {\n _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: input.data\n };\n }\n _regex(regex, validation, message) {\n return this.refinement((data)=>regex.test(data), {\n validation,\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_string,\n ..._helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.errToObj(message)\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [\n ...this._def.checks,\n check\n ]\n });\n }\n email(message) {\n return this._addCheck({\n kind: \"email\",\n ..._helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.errToObj(message)\n });\n }\n url(message) {\n return this._addCheck({\n kind: \"url\",\n ..._helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.errToObj(message)\n });\n }\n emoji(message) {\n return this._addCheck({\n kind: \"emoji\",\n ..._helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.errToObj(message)\n });\n }\n uuid(message) {\n return this._addCheck({\n kind: \"uuid\",\n ..._helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.errToObj(message)\n });\n }\n nanoid(message) {\n return this._addCheck({\n kind: \"nanoid\",\n ..._helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.errToObj(message)\n });\n }\n cuid(message) {\n return this._addCheck({\n kind: \"cuid\",\n ..._helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.errToObj(message)\n });\n }\n cuid2(message) {\n return this._addCheck({\n kind: \"cuid2\",\n ..._helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.errToObj(message)\n });\n }\n ulid(message) {\n return this._addCheck({\n kind: \"ulid\",\n ..._helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.errToObj(message)\n });\n }\n base64(message) {\n return this._addCheck({\n kind: \"base64\",\n ..._helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.errToObj(message)\n });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ..._helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.errToObj(message)\n });\n }\n jwt(options) {\n return this._addCheck({\n kind: \"jwt\",\n ..._helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.errToObj(options)\n });\n }\n ip(options) {\n return this._addCheck({\n kind: \"ip\",\n ..._helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.errToObj(options)\n });\n }\n cidr(options) {\n return this._addCheck({\n kind: \"cidr\",\n ..._helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.errToObj(options)\n });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ..._helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.errToObj(options?.message)\n });\n }\n date(message) {\n return this._addCheck({\n kind: \"date\",\n message\n });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ..._helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.errToObj(options?.message)\n });\n }\n duration(message) {\n return this._addCheck({\n kind: \"duration\",\n ..._helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.errToObj(message)\n });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ..._helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.errToObj(message)\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ..._helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.errToObj(options?.message)\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ..._helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.errToObj(message)\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ..._helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.errToObj(message)\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ..._helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.errToObj(message)\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ..._helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.errToObj(message)\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ..._helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.errToObj(message)\n });\n }\n /**\n * Equivalent to `.min(1)`\n */ nonempty(message) {\n return this.min(1, _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind: \"trim\"\n }\n ]\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind: \"toLowerCase\"\n }\n ]\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind: \"toUpperCase\"\n }\n ]\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch)=>ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch)=>ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch)=>ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch)=>ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch)=>ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch)=>ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch)=>ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch)=>ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch)=>ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch)=>ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch)=>ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch)=>ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch)=>ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch)=>ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch)=>ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch)=>ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks){\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min) min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks){\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max) max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params)=>{\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params)\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return valInt % stepInt / 10 ** decCount;\n}\nclass ZodNumber extends ZodType {\n constructor(){\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_type,\n expected: _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.number,\n received: ctx.parsedType\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n let ctx = undefined;\n const status = new _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.ParseStatus();\n for (const check of this._def.checks){\n if (check.kind === \"int\") {\n if (!_helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.not_finite,\n message: check.message\n });\n status.dirty();\n }\n } else {\n _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: input.data\n };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message)\n }\n ]\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n check\n ]\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message)\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message)\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message)\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message)\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message)\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message)\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message)\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message)\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message)\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks){\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min) min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks){\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max) max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch)=>ch.kind === \"int\" || ch.kind === \"multipleOf\" && _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.util.isInteger(ch.value));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks){\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n } else if (ch.kind === \"min\") {\n if (min === null || ch.value > min) min = ch.value;\n } else if (ch.kind === \"max\") {\n if (max === null || ch.value < max) max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params)=>{\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params)\n });\n};\nclass ZodBigInt extends ZodType {\n constructor(){\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n } catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.ParseStatus();\n for (const check of this._def.checks){\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message\n });\n status.dirty();\n }\n } else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message\n });\n status.dirty();\n }\n } else {\n _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: input.data\n };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_type,\n expected: _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.bigint,\n received: ctx.parsedType\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message)\n }\n ]\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n check\n ]\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message)\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message)\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message)\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message)\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message)\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks){\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min) min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks){\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max) max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params)=>{\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params)\n });\n};\nclass ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_type,\n expected: _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.boolean,\n received: ctx.parsedType\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n return (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.OK)(input.data);\n }\n}\nZodBoolean.create = (params)=>{\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params)\n });\n};\nclass ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_type,\n expected: _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.date,\n received: ctx.parsedType\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_date\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n const status = new _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks){\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\"\n });\n status.dirty();\n }\n } else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\"\n });\n status.dirty();\n }\n } else {\n _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime())\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [\n ...this._def.checks,\n check\n ]\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message)\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message)\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks){\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min) min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks){\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max) max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params)=>{\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params)\n });\n};\nclass ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_type,\n expected: _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.symbol,\n received: ctx.parsedType\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n return (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.OK)(input.data);\n }\n}\nZodSymbol.create = (params)=>{\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params)\n });\n};\nclass ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_type,\n expected: _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.undefined,\n received: ctx.parsedType\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n return (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.OK)(input.data);\n }\n}\nZodUndefined.create = (params)=>{\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params)\n });\n};\nclass ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_type,\n expected: _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.null,\n received: ctx.parsedType\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n return (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.OK)(input.data);\n }\n}\nZodNull.create = (params)=>{\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params)\n });\n};\nclass ZodAny extends ZodType {\n constructor(){\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.OK)(input.data);\n }\n}\nZodAny.create = (params)=>{\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params)\n });\n};\nclass ZodUnknown extends ZodType {\n constructor(){\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.OK)(input.data);\n }\n}\nZodUnknown.create = (params)=>{\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params)\n });\n};\nclass ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_type,\n expected: _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.never,\n received: ctx.parsedType\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n}\nZodNever.create = (params)=>{\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params)\n });\n};\nclass ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_type,\n expected: _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.void,\n received: ctx.parsedType\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n return (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.OK)(input.data);\n }\n}\nZodVoid.create = (params)=>{\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params)\n });\n};\nclass ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.array) {\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_type,\n expected: _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.array,\n received: ctx.parsedType\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: tooBig ? _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.too_big : _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.too_small,\n minimum: tooSmall ? def.exactLength.value : undefined,\n maximum: tooBig ? def.exactLength.value : undefined,\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([\n ...ctx.data\n ].map((item, i)=>{\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result)=>{\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.ParseStatus.mergeArray(status, result);\n });\n }\n const result = [\n ...ctx.data\n ].map((item, i)=>{\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: {\n value: minLength,\n message: _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message)\n }\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: {\n value: maxLength,\n message: _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message)\n }\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: {\n value: len,\n message: _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message)\n }\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params)=>{\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params)\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for(const key in schema.shape){\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: ()=>newShape\n });\n } else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element)\n });\n } else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n } else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n } else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item)=>deepPartialify(item)));\n } else {\n return schema;\n }\n}\nclass ZodObject extends ZodType {\n constructor(){\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */ this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */ this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null) return this._cached;\n const shape = this._def.shape();\n const keys = _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.util.objectKeys(shape);\n this._cached = {\n shape,\n keys\n };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_type,\n expected: _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.object,\n received: ctx.parsedType\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for(const key in ctx.data){\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys){\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: {\n status: \"valid\",\n value: key\n },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys){\n pairs.push({\n key: {\n status: \"valid\",\n value: key\n },\n value: {\n status: \"valid\",\n value: ctx.data[key]\n }\n });\n }\n } else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.unrecognized_keys,\n keys: extraKeys\n });\n status.dirty();\n }\n } else if (unknownKeys === \"strip\") {} else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n } else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys){\n const value = ctx.data[key];\n pairs.push({\n key: {\n status: \"valid\",\n value: key\n },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve().then(async ()=>{\n const syncPairs = [];\n for (const pair of pairs){\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet\n });\n }\n return syncPairs;\n }).then((syncPairs)=>{\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.ParseStatus.mergeObjectSync(status, syncPairs);\n });\n } else {\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...message !== undefined ? {\n errorMap: (issue, ctx)=>{\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\") return {\n message: _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.errToObj(message).message ?? defaultError\n };\n return {\n message: defaultError\n };\n }\n } : {}\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\"\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\"\n });\n }\n // const AugmentFactory =\n // (def: Def) =>\n // (\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: ()=>({\n ...this._def.shape(),\n ...augmentation\n })\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */ merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: ()=>({\n ...this._def.shape(),\n ...merging._def.shape()\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({\n [key]: schema\n });\n }\n // merge(\n // merging: Incoming\n // ): //ZodObject = (merging) => {\n // ZodObject<\n // extendShape>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.util.objectKeys(mask)){\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: ()=>shape\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.util.objectKeys(this.shape)){\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: ()=>shape\n });\n }\n /**\n * @deprecated\n */ deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.util.objectKeys(this.shape)){\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n } else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: ()=>newShape\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.util.objectKeys(this.shape)){\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n } else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while(newField instanceof ZodOptional){\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: ()=>newShape\n });\n }\n keyof() {\n return createZodEnum(_helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params)=>{\n return new ZodObject({\n shape: ()=>shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params)\n });\n};\nZodObject.strictCreate = (shape, params)=>{\n return new ZodObject({\n shape: ()=>shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params)\n });\n};\nZodObject.lazycreate = (shape, params)=>{\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params)\n });\n};\nclass ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results){\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results){\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result)=>new _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodError(result.ctx.common.issues));\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_union,\n unionErrors\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option)=>{\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: []\n },\n parent: null\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx\n }),\n ctx: childCtx\n };\n })).then(handleResults);\n } else {\n let dirty = undefined;\n const issues = [];\n for (const option of options){\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: []\n },\n parent: null\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx\n });\n if (result.status === \"valid\") {\n return result;\n } else if (result.status === \"dirty\" && !dirty) {\n dirty = {\n result,\n ctx: childCtx\n };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues)=>new _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodError(issues));\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_union,\n unionErrors\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params)=>{\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params)\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type)=>{\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n } else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n } else if (type instanceof ZodLiteral) {\n return [\n type.value\n ];\n } else if (type instanceof ZodEnum) {\n return type.options;\n } else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.util.objectValues(type.enum);\n } else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n } else if (type instanceof ZodUndefined) {\n return [\n undefined\n ];\n } else if (type instanceof ZodNull) {\n return [\n null\n ];\n } else if (type instanceof ZodOptional) {\n return [\n undefined,\n ...getDiscriminator(type.unwrap())\n ];\n } else if (type instanceof ZodNullable) {\n return [\n null,\n ...getDiscriminator(type.unwrap())\n ];\n } else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n } else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n } else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n } else {\n return [];\n }\n};\nclass ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.object) {\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_type,\n expected: _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.object,\n received: ctx.parsedType\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [\n discriminator\n ]\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx\n });\n } else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */ static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options){\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues){\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params)\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = (0,_helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.getParsedType)(a);\n const bType = (0,_helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.getParsedType)(b);\n if (a === b) {\n return {\n valid: true,\n data: a\n };\n } else if (aType === _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.object && bType === _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.object) {\n const bKeys = _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.util.objectKeys(b);\n const sharedKeys = _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.util.objectKeys(a).filter((key)=>bKeys.indexOf(key) !== -1);\n const newObj = {\n ...a,\n ...b\n };\n for (const key of sharedKeys){\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return {\n valid: false\n };\n }\n newObj[key] = sharedValue.data;\n }\n return {\n valid: true,\n data: newObj\n };\n } else if (aType === _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.array && bType === _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.array) {\n if (a.length !== b.length) {\n return {\n valid: false\n };\n }\n const newArray = [];\n for(let index = 0; index < a.length; index++){\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return {\n valid: false\n };\n }\n newArray.push(sharedValue.data);\n }\n return {\n valid: true,\n data: newArray\n };\n } else if (aType === _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.date && bType === _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.date && +a === +b) {\n return {\n valid: true,\n data: a\n };\n } else {\n return {\n valid: false\n };\n }\n}\nclass ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight)=>{\n if ((0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.isAborted)(parsedLeft) || (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.isAborted)(parsedRight)) {\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_intersection_types\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n if ((0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.isDirty)(parsedLeft) || (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.isDirty)(parsedRight)) {\n status.dirty();\n }\n return {\n status: status.value,\n value: merged.data\n };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx\n })\n ]).then(([left, right])=>handleParsed(left, right));\n } else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params)=>{\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params)\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nclass ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.array) {\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_type,\n expected: _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.array,\n received: ctx.parsedType\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\"\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\"\n });\n status.dirty();\n }\n const items = [\n ...ctx.data\n ].map((item, itemIndex)=>{\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema) return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n }).filter((x)=>!!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results)=>{\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.ParseStatus.mergeArray(status, results);\n });\n } else {\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest\n });\n }\n}\nZodTuple.create = (schemas, params)=>{\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params)\n });\n};\nclass ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.object) {\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_type,\n expected: _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.object,\n received: ctx.parsedType\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for(const key in ctx.data){\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data\n });\n }\n if (ctx.common.async) {\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.ParseStatus.mergeObjectAsync(status, pairs);\n } else {\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third)\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second)\n });\n }\n}\nclass ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.map) {\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_type,\n expected: _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.map,\n received: ctx.parsedType\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [\n ...ctx.data.entries()\n ].map(([key, value], index)=>{\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [\n index,\n \"key\"\n ])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [\n index,\n \"value\"\n ]))\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async ()=>{\n for (const pair of pairs){\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return {\n status: status.value,\n value: finalMap\n };\n });\n } else {\n const finalMap = new Map();\n for (const pair of pairs){\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return {\n status: status.value,\n value: finalMap\n };\n }\n }\n}\nZodMap.create = (keyType, valueType, params)=>{\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params)\n });\n};\nclass ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.set) {\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_type,\n expected: _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.set,\n received: ctx.parsedType\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements){\n if (element.status === \"aborted\") return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n if (element.status === \"dirty\") status.dirty();\n parsedSet.add(element.value);\n }\n return {\n status: status.value,\n value: parsedSet\n };\n }\n const elements = [\n ...ctx.data.values()\n ].map((item, i)=>valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements)=>finalizeSet(elements));\n } else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: {\n value: minSize,\n message: _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message)\n }\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: {\n value: maxSize,\n message: _helpers_errorUtil_js__WEBPACK_IMPORTED_MODULE_3__.errorUtil.toString(message)\n }\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params)=>{\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params)\n });\n};\nclass ZodFunction extends ZodType {\n constructor(){\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.function) {\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_type,\n expected: _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.function,\n received: ctx.parsedType\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n function makeArgsIssue(args, error) {\n return (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.makeIssue)({\n data: args,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n (0,_errors_js__WEBPACK_IMPORTED_MODULE_4__.getErrorMap)(),\n _errors_js__WEBPACK_IMPORTED_MODULE_4__.defaultErrorMap\n ].filter((x)=>!!x),\n issueData: {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_arguments,\n argumentsError: error\n }\n });\n }\n function makeReturnsIssue(returns, error) {\n return (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.makeIssue)({\n data: returns,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n (0,_errors_js__WEBPACK_IMPORTED_MODULE_4__.getErrorMap)(),\n _errors_js__WEBPACK_IMPORTED_MODULE_4__.defaultErrorMap\n ].filter((x)=>!!x),\n issueData: {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_return_type,\n returnTypeError: error\n }\n });\n }\n const params = {\n errorMap: ctx.common.contextualErrorMap\n };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.OK)(async function(...args) {\n const error = new _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e)=>{\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type.parseAsync(result, params).catch((e)=>{\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n } else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.OK)(function(...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodError([\n makeArgsIssue(args, parsedArgs.error)\n ]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodError([\n makeReturnsIssue(result, parsedReturns.error)\n ]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create())\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: args ? args : ZodTuple.create([]).rest(ZodUnknown.create()),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params)\n });\n }\n}\nclass ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({\n data: ctx.data,\n path: ctx.path,\n parent: ctx\n });\n }\n}\nZodLazy.create = (getter, params)=>{\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params)\n });\n};\nclass ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n received: ctx.data,\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_literal,\n expected: this._def.value\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n return {\n status: \"valid\",\n value: input.data\n };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params)=>{\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params)\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params)\n });\n}\nclass ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n expected: _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_type\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n received: ctx.data,\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_enum_value,\n options: expectedValues\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n return (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.OK)(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values){\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values){\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values){\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt)=>!values.includes(opt)), {\n ...this._def,\n ...newDef\n });\n }\n}\nZodEnum.create = createZodEnum;\nclass ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.string && ctx.parsedType !== _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.number) {\n const expectedValues = _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.util.objectValues(nativeEnumValues);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n expected: _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_type\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(_helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.util.objectValues(nativeEnumValues);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n received: ctx.data,\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_enum_value,\n options: expectedValues\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n return (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.OK)(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params)=>{\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params)\n });\n};\nclass ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.promise && ctx.common.async === false) {\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_type,\n expected: _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.promise,\n received: ctx.parsedType\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n const promisified = ctx.parsedType === _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.OK)(promisified.then((data)=>{\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap\n });\n }));\n }\n}\nZodPromise.create = (schema, params)=>{\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params)\n });\n};\nclass ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects ? this._def.schema.sourceType() : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg)=>{\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, arg);\n if (arg.fatal) {\n status.abort();\n } else {\n status.dirty();\n }\n },\n get path () {\n return ctx.path;\n }\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed)=>{\n if (status.value === \"aborted\") return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx\n });\n if (result.status === \"aborted\") return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n if (result.status === \"dirty\") return (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.DIRTY)(result.value);\n if (status.value === \"dirty\") return (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.DIRTY)(result.value);\n return result;\n });\n } else {\n if (status.value === \"aborted\") return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx\n });\n if (result.status === \"aborted\") return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n if (result.status === \"dirty\") return (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.DIRTY)(result.value);\n if (status.value === \"dirty\") return (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.DIRTY)(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc)=>{\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx\n });\n if (inner.status === \"aborted\") return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n if (inner.status === \"dirty\") status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return {\n status: status.value,\n value: inner.value\n };\n } else {\n return this._def.schema._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx\n }).then((inner)=>{\n if (inner.status === \"aborted\") return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n if (inner.status === \"dirty\") status.dirty();\n return executeRefinement(inner.value).then(()=>{\n return {\n status: status.value,\n value: inner.value\n };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx\n });\n if (!(0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.isValid)(base)) return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return {\n status: status.value,\n value: result\n };\n } else {\n return this._def.schema._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx\n }).then((base)=>{\n if (!(0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.isValid)(base)) return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result)=>({\n status: status.value,\n value: result\n }));\n });\n }\n }\n _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params)=>{\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params)\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params)=>{\n return new ZodEffects({\n schema,\n effect: {\n type: \"preprocess\",\n transform: preprocess\n },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params)\n });\n};\n\nclass ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.undefined) {\n return (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.OK)(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params)=>{\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params)\n });\n};\nclass ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.null) {\n return (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.OK)(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params)=>{\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params)\n });\n};\nclass ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params)=>{\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : ()=>params.default,\n ...processCreateParams(params)\n });\n};\nclass ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: []\n }\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx\n }\n });\n if ((0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.isAsync)(result)) {\n return result.then((result)=>{\n return {\n status: \"valid\",\n value: result.status === \"valid\" ? result.value : this._def.catchValue({\n get error () {\n return new _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodError(newCtx.common.issues);\n },\n input: newCtx.data\n })\n };\n });\n } else {\n return {\n status: \"valid\",\n value: result.status === \"valid\" ? result.value : this._def.catchValue({\n get error () {\n return new _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodError(newCtx.common.issues);\n },\n input: newCtx.data\n })\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params)=>{\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : ()=>params.catch,\n ...processCreateParams(params)\n });\n};\nclass ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.addIssueToContext)(ctx, {\n code: _ZodError_js__WEBPACK_IMPORTED_MODULE_1__.ZodIssueCode.invalid_type,\n expected: _helpers_util_js__WEBPACK_IMPORTED_MODULE_2__.ZodParsedType.nan,\n received: ctx.parsedType\n });\n return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n }\n return {\n status: \"valid\",\n value: input.data\n };\n }\n}\nZodNaN.create = (params)=>{\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params)\n });\n};\nconst BRAND = Symbol(\"zod_brand\");\nclass ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nclass ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async ()=>{\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx\n });\n if (inResult.status === \"aborted\") return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.DIRTY)(inResult.value);\n } else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx\n });\n }\n };\n return handleAsync();\n } else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx\n });\n if (inResult.status === \"aborted\") return _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value\n };\n } else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline\n });\n }\n}\nclass ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data)=>{\n if ((0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.isValid)(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return (0,_helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.isAsync)(result) ? result.then((data)=>freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params)=>{\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params)\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? {\n message: params\n } : params;\n const p2 = typeof p === \"string\" ? {\n message: p\n } : p;\n return p2;\n}\nfunction custom(check, _params = {}, /**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */ fatal) {\n if (check) return ZodAny.create().superRefine((data, ctx)=>{\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r)=>{\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({\n code: \"custom\",\n ...params,\n fatal: _fatal\n });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({\n code: \"custom\",\n ...params,\n fatal: _fatal\n });\n }\n return;\n });\n return ZodAny.create();\n}\n\nconst late = {\n object: ZodObject.lazycreate\n};\nvar ZodFirstPartyTypeKind;\n(function(ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._){}\n}\nconst instanceOfType = (// const instanceOfType = any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`\n})=>custom((data)=>data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = ()=>stringType().optional();\nconst onumber = ()=>numberType().optional();\nconst oboolean = ()=>booleanType().optional();\nconst coerce = {\n string: (arg)=>ZodString.create({\n ...arg,\n coerce: true\n }),\n number: (arg)=>ZodNumber.create({\n ...arg,\n coerce: true\n }),\n boolean: (arg)=>ZodBoolean.create({\n ...arg,\n coerce: true\n }),\n bigint: (arg)=>ZodBigInt.create({\n ...arg,\n coerce: true\n }),\n date: (arg)=>ZodDate.create({\n ...arg,\n coerce: true\n })\n};\n\nconst NEVER = _helpers_parseUtil_js__WEBPACK_IMPORTED_MODULE_0__.INVALID;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96b2QvdjMvdHlwZXMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUF3RDtBQUNHO0FBQ1I7QUFDMkY7QUFDdkU7QUFDdkUsTUFBTWtCO0lBQ0ZDLFlBQVlDLE1BQU0sRUFBRUMsS0FBSyxFQUFFQyxJQUFJLEVBQUVDLEdBQUcsQ0FBRTtRQUNsQyxJQUFJLENBQUNDLFdBQVcsR0FBRyxFQUFFO1FBQ3JCLElBQUksQ0FBQ0osTUFBTSxHQUFHQTtRQUNkLElBQUksQ0FBQ0ssSUFBSSxHQUFHSjtRQUNaLElBQUksQ0FBQ0ssS0FBSyxHQUFHSjtRQUNiLElBQUksQ0FBQ0ssSUFBSSxHQUFHSjtJQUNoQjtJQUNBLElBQUlELE9BQU87UUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDRSxXQUFXLENBQUNJLE1BQU0sRUFBRTtZQUMxQixJQUFJQyxNQUFNQyxPQUFPLENBQUMsSUFBSSxDQUFDSCxJQUFJLEdBQUc7Z0JBQzFCLElBQUksQ0FBQ0gsV0FBVyxDQUFDTyxJQUFJLElBQUksSUFBSSxDQUFDTCxLQUFLLEtBQUssSUFBSSxDQUFDQyxJQUFJO1lBQ3JELE9BQ0s7Z0JBQ0QsSUFBSSxDQUFDSCxXQUFXLENBQUNPLElBQUksSUFBSSxJQUFJLENBQUNMLEtBQUssRUFBRSxJQUFJLENBQUNDLElBQUk7WUFDbEQ7UUFDSjtRQUNBLE9BQU8sSUFBSSxDQUFDSCxXQUFXO0lBQzNCO0FBQ0o7QUFDQSxNQUFNUSxlQUFlLENBQUNDLEtBQUtDO0lBQ3ZCLElBQUlyQiw4REFBT0EsQ0FBQ3FCLFNBQVM7UUFDakIsT0FBTztZQUFFQyxTQUFTO1lBQU1WLE1BQU1TLE9BQU9iLEtBQUs7UUFBQztJQUMvQyxPQUNLO1FBQ0QsSUFBSSxDQUFDWSxJQUFJRyxNQUFNLENBQUNDLE1BQU0s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UTdOLFVBQVV0SixNQUFNLENBQUM7WUFBRSxHQUFHbVgsR0FBRztZQUFFOVMsUUFBUTtRQUFLO0lBQzFEZ0gsU0FBVSxDQUFDOEwsTUFBUWhNLFdBQVduTCxNQUFNLENBQUM7WUFDakMsR0FBR21YLEdBQUc7WUFDTjlTLFFBQVE7UUFDWjtJQUNBNkcsUUFBUyxDQUFDaU0sTUFBUXBNLFVBQVUvSyxNQUFNLENBQUM7WUFBRSxHQUFHbVgsR0FBRztZQUFFOVMsUUFBUTtRQUFLO0lBQzFEMkMsTUFBTyxDQUFDbVEsTUFBUTdMLFFBQVF0TCxNQUFNLENBQUM7WUFBRSxHQUFHbVgsR0FBRztZQUFFOVMsUUFBUTtRQUFLO0FBQzFELEVBQUU7QUFDczNCO0FBQ2ozQixNQUFNdVksUUFBUTNqQiwwREFBT0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL3doaXNreS12YXVsdC8uL25vZGVfbW9kdWxlcy96b2QvdjMvdHlwZXMuanM/NGNmYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBab2RFcnJvciwgWm9kSXNzdWVDb2RlLCB9IGZyb20gXCIuL1pvZEVycm9yLmpzXCI7XG5pbXBvcnQgeyBkZWZhdWx0RXJyb3JNYXAsIGdldEVycm9yTWFwIH0gZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5pbXBvcnQgeyBlcnJvclV0aWwgfSBmcm9tIFwiLi9oZWxwZXJzL2Vycm9yVXRpbC5qc1wiO1xuaW1wb3J0IHsgRElSVFksIElOVkFMSUQsIE9LLCBQYXJzZVN0YXR1cywgYWRkSXNzdWVUb0NvbnRleHQsIGlzQWJvcnRlZCwgaXNBc3luYywgaXNEaXJ0eSwgaXNWYWxpZCwgbWFrZUlzc3VlLCB9IGZyb20gXCIuL2hlbHBlcnMvcGFyc2VVdGlsLmpzXCI7XG5pbXBvcnQgeyB1dGlsLCBab2RQYXJzZWRUeXBlLCBnZXRQYXJzZWRUeXBlIH0gZnJvbSBcIi4vaGVscGVycy91dGlsLmpzXCI7XG5jbGFzcyBQYXJzZUlucHV0TGF6eVBhdGgge1xuICAgIGNvbnN0cnVjdG9yKHBhcmVudCwgdmFsdWUsIHBhdGgsIGtleSkge1xuICAgICAgICB0aGlzLl9jYWNoZWRQYXRoID0gW107XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLmRhdGEgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fcGF0aCA9IHBhdGg7XG4gICAgICAgIHRoaXMuX2tleSA9IGtleTtcbiAgICB9XG4gICAgZ2V0IHBhdGgoKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2FjaGVkUGF0aC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuX2tleSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRQYXRoLnB1c2goLi4udGhpcy5fcGF0aCwgLi4udGhpcy5fa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZFBhdGgucHVzaCguLi50aGlzLl9wYXRoLCB0aGlzLl9rZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWNoZWRQYXRoO1xuICAgIH1cbn1cbmNvbnN0IGhhbmRsZVJlc3VsdCA9IChjdHgsIHJlc3VsdCkgPT4ge1xuICAgIGlmIChpc1ZhbGlkKHJlc3VsdCkpIHtcbiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgZGF0YTogcmVzdWx0LnZhbHVlIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoIWN0eC5jb21tb24uaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVmFsaWRhdGlvbiBmYWlsZWQgYnV0IG5vIGlzc3VlcyBkZXRlY3RlZC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZ2V0IGVycm9yKCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9lcnJvcilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IFpvZEVycm9yKGN0eC5jb21tb24uaXNzdWVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9lcnJvcjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxufTtcbmZ1bmN0aW9uIHByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSB7XG4gICAgaWYgKCFwYXJhbXMpXG4gICAgICAgIHJldHVybiB7fTtcbiAgICBjb25zdCB7IGVycm9yTWFwLCBpbnZhbGlkX3R5cGVfZXJyb3IsIHJlcXVpcmVkX2Vycm9yLCBkZXNjcmlwdGlvbiB9ID0gcGFyYW1zO1xuICAgIGlmIChlcnJvck1hcCAmJiAoaW52YWxpZF90eXBlX2Vycm9yIHx8IHJlcXVpcmVkX2Vycm9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IHVzZSBcImludmFsaWRfdHlwZV9lcnJvclwiIG9yIFwicmVxdWlyZWRfZXJyb3JcIiBpbiBjb25qdW5jdGlvbiB3aXRoIGN1c3RvbSBlcnJvciBtYXAuYCk7XG4gICAgfVxuICAgIGlmIChlcnJvck1hcClcbiAgICAgICAgcmV0dXJuIHsgZXJyb3JNYXA6IGVycm9yTWFwLCBkZXNjcmlwdGlvbiB9O1xuICAgIGNvbnN0IGN1c3RvbU1hcCA9IChpc3MsIGN0eCkgPT4ge1xuICAgICAgICBjb25zdCB7IG1lc3NhZ2UgfSA9IHBhcmFtcztcbiAgICAgICAgaWYgKGlzcy5jb2RlID09PSBcImludmFsaWRfZW51bV92YWx1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4geyBtZXNzYWdlOiBtZXNzYWdlID8/IGN0eC5kZWZhdWx0RXJyb3IgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGN0eC5kYXRhID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICByZXR1cm4geyBtZXNzYWdlOiBtZXNzYWdlID8/IHJlcXVpcmVkX2Vycm9yID8/IGN0eC5kZWZhdWx0RXJyb3IgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNzLmNvZGUgIT09IFwiaW52YWxpZF90eXBlXCIpXG4gICAgICAgICAgICByZXR1cm4geyBtZXNzYWdlOiBjdHguZGVmYXVsdEVycm9yIH07XG4gICAgICAgIHJldHVybiB7IG1lc3NhZ2U6IG1lc3NhZ2UgPz8gaW52YWxpZF90eXBlX2Vycm9yID8/IGN0eC5kZWZhdWx0RXJyb3IgfTtcbiAgICB9O1xuICAgIHJldHVybiB7IGVycm9yTWFwOiBjdXN0b21NYXAsIGRlc2NyaXB0aW9uIH07XG59XG5leHBvcnQgY2xhc3MgWm9kVHlwZSB7XG4gICAgZ2V0IGRlc2NyaXB0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmRlc2NyaXB0aW9uO1xuICAgIH1cbiAgICBfZ2V0VHlwZShpbnB1dCkge1xuICAgICAgICByZXR1cm4gZ2V0UGFyc2VkVHlwZShpbnB1dC5kYXRhKTtcbiAgICB9XG4gICAgX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpIHtcbiAgICAgICAgcmV0dXJuIChjdHggfHwge1xuICAgICAgICAgICAgY29tbW9uOiBpbnB1dC5wYXJlbnQuY29tbW9uLFxuICAgICAgICAgICAgZGF0YTogaW5wdXQuZGF0YSxcbiAgICAgICAgICAgIHBhcnNlZFR5cGU6IGdldFBhcnNlZFR5cGUoaW5wdXQuZGF0YSksXG4gICAgICAgICAgICBzY2hlbWFFcnJvck1hcDogdGhpcy5fZGVmLmVycm9yTWFwLFxuICAgICAgICAgICAgcGF0aDogaW5wdXQucGF0aCxcbiAgICAgICAgICAgIHBhcmVudDogaW5wdXQucGFyZW50LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhdHVzOiBuZXcgUGFyc2VTdGF0dXMoKSxcbiAgICAgICAgICAgIGN0eDoge1xuICAgICAgICAgICAgICAgIGNvbW1vbjogaW5wdXQucGFyZW50LmNvbW1vbixcbiAgICAgICAgICAgICAgICBkYXRhOiBpbnB1dC5kYXRhLFxuICAgICAgICAgICAgICAgIHBhcnNlZFR5cGU6IGdldFBhcnNlZFR5cGUoaW5wdXQuZGF0YSksXG4gICAgICAgICAgICAgICAgc2NoZW1hRXJyb3JNYXA6IHRoaXMuX2RlZi5lcnJvck1hcCxcbiAgICAgICAgICAgICAgICBwYXRoOiBpbnB1dC5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmVudDogaW5wdXQucGFyZW50LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX3BhcnNlU3luYyhpbnB1dCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9wYXJzZShpbnB1dCk7XG4gICAgICAgIGlmIChpc0FzeW5jKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN5bmNocm9ub3VzIHBhcnNlIGVuY291bnRlcmVkIHByb21pc2UuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIF9wYXJzZUFzeW5jKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX3BhcnNlKGlucHV0KTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXN1bHQpO1xuICAgIH1cbiAgICBwYXJzZShkYXRhLCBwYXJhbXMpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zYWZlUGFyc2UoZGF0YSwgcGFyYW1zKTtcbiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgfVxuICAgIHNhZmVQYXJzZShkYXRhLCBwYXJhbXMpIHtcbiAgICAgICAgY29uc3QgY3R4ID0ge1xuICAgICAgICAgICAgY29tbW9uOiB7XG4gICAgICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgICAgICAgICBhc3luYzogcGFyYW1zPy5hc3luYyA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb250ZXh0dWFsRXJyb3JNYXA6IHBhcmFtcz8uZXJyb3JNYXAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF0aDogcGFyYW1zPy5wYXRoIHx8IFtdLFxuICAgICAgICAgICAgc2NoZW1hRXJyb3JNYXA6IHRoaXMuX2RlZi5lcnJvck1hcCxcbiAgICAgICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBwYXJzZWRUeXBlOiBnZXRQYXJzZWRUeXBlKGRhdGEpLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9wYXJzZVN5bmMoeyBkYXRhLCBwYXRoOiBjdHgucGF0aCwgcGFyZW50OiBjdHggfSk7XG4gICAgICAgIHJldHVybiBoYW5kbGVSZXN1bHQoY3R4LCByZXN1bHQpO1xuICAgIH1cbiAgICBcIn52YWxpZGF0ZVwiKGRhdGEpIHtcbiAgICAgICAgY29uc3QgY3R4ID0ge1xuICAgICAgICAgICAgY29tbW9uOiB7XG4gICAgICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgICAgICAgICBhc3luYzogISF0aGlzW1wifnN0YW5kYXJkXCJdLmFzeW5jLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdGg6IFtdLFxuICAgICAgICAgICAgc2NoZW1hRXJyb3JNYXA6IHRoaXMuX2RlZi5lcnJvck1hcCxcbiAgICAgICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBwYXJzZWRUeXBlOiBnZXRQYXJzZWRUeXBlKGRhdGEpLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoIXRoaXNbXCJ+c3RhbmRhcmRcIl0uYXN5bmMpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fcGFyc2VTeW5jKHsgZGF0YSwgcGF0aDogW10sIHBhcmVudDogY3R4IH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkKHJlc3VsdClcbiAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcmVzdWx0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWVzOiBjdHguY29tbW9uLmlzc3VlcyxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyPy5tZXNzYWdlPy50b0xvd2VyQ2FzZSgpPy5pbmNsdWRlcyhcImVuY291bnRlcmVkXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbXCJ+c3RhbmRhcmRcIl0uYXN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdHguY29tbW9uID0ge1xuICAgICAgICAgICAgICAgICAgICBpc3N1ZXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICBhc3luYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJzZUFzeW5jKHsgZGF0YSwgcGF0aDogW10sIHBhcmVudDogY3R4IH0pLnRoZW4oKHJlc3VsdCkgPT4gaXNWYWxpZChyZXN1bHQpXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogcmVzdWx0LnZhbHVlLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgaXNzdWVzOiBjdHguY29tbW9uLmlzc3VlcyxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyBwYXJzZUFzeW5jKGRhdGEsIHBhcmFtcykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNhZmVQYXJzZUFzeW5jKGRhdGEsIHBhcmFtcyk7XG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2VzcylcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQuZGF0YTtcbiAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgIH1cbiAgICBhc3luYyBzYWZlUGFyc2VBc3luYyhkYXRhLCBwYXJhbXMpIHtcbiAgICAgICAgY29uc3QgY3R4ID0ge1xuICAgICAgICAgICAgY29tbW9uOiB7XG4gICAgICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgICAgICAgICBjb250ZXh0dWFsRXJyb3JNYXA6IHBhcmFtcz8uZXJyb3JNYXAsXG4gICAgICAgICAgICAgICAgYXN5bmM6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF0aDogcGFyYW1zPy5wYXRoIHx8IFtdLFxuICAgICAgICAgICAgc2NoZW1hRXJyb3JNYXA6IHRoaXMuX2RlZi5lcnJvck1hcCxcbiAgICAgICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBwYXJzZWRUeXBlOiBnZXRQYXJzZWRUeXBlKGRhdGEpLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBtYXliZUFzeW5jUmVzdWx0ID0gdGhpcy5fcGFyc2UoeyBkYXRhLCBwYXRoOiBjdHgucGF0aCwgcGFyZW50OiBjdHggfSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IChpc0FzeW5jKG1heWJlQXN5bmNSZXN1bHQpID8gbWF5YmVBc3luY1Jlc3VsdCA6IFByb21pc2UucmVzb2x2ZShtYXliZUFzeW5jUmVzdWx0KSk7XG4gICAgICAgIHJldHVybiBoYW5kbGVSZXN1bHQoY3R4LCByZXN1bHQpO1xuICAgIH1cbiAgICByZWZpbmUoY2hlY2ssIG1lc3NhZ2UpIHtcbiAgICAgICAgY29uc3QgZ2V0SXNzdWVQcm9wZXJ0aWVzID0gKHZhbCkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBtZXNzYWdlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbWVzc2FnZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG1lc3NhZ2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlKHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZmluZW1lbnQoKHZhbCwgY3R4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjaGVjayh2YWwpO1xuICAgICAgICAgICAgY29uc3Qgc2V0RXJyb3IgPSAoKSA9PiBjdHguYWRkSXNzdWUoe1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5jdXN0b20sXG4gICAgICAgICAgICAgICAgLi4uZ2V0SXNzdWVQcm9wZXJ0aWVzKHZhbCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgUHJvbWlzZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiByZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHNldEVycm9yKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZWZpbmVtZW50KGNoZWNrLCByZWZpbmVtZW50RGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVmaW5lbWVudCgodmFsLCBjdHgpID0+IHtcbiAgICAgICAgICAgIGlmICghY2hlY2sodmFsKSkge1xuICAgICAgICAgICAgICAgIGN0eC5hZGRJc3N1ZSh0eXBlb2YgcmVmaW5lbWVudERhdGEgPT09IFwiZnVuY3Rpb25cIiA/IHJlZmluZW1lbnREYXRhKHZhbCwgY3R4KSA6IHJlZmluZW1lbnREYXRhKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9yZWZpbmVtZW50KHJlZmluZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RFZmZlY3RzKHtcbiAgICAgICAgICAgIHNjaGVtYTogdGhpcyxcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRWZmZWN0cyxcbiAgICAgICAgICAgIGVmZmVjdDogeyB0eXBlOiBcInJlZmluZW1lbnRcIiwgcmVmaW5lbWVudCB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc3VwZXJSZWZpbmUocmVmaW5lbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVmaW5lbWVudChyZWZpbmVtZW50KTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoZGVmKSB7XG4gICAgICAgIC8qKiBBbGlhcyBvZiBzYWZlUGFyc2VBc3luYyAqL1xuICAgICAgICB0aGlzLnNwYSA9IHRoaXMuc2FmZVBhcnNlQXN5bmM7XG4gICAgICAgIHRoaXMuX2RlZiA9IGRlZjtcbiAgICAgICAgdGhpcy5wYXJzZSA9IHRoaXMucGFyc2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zYWZlUGFyc2UgPSB0aGlzLnNhZmVQYXJzZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnBhcnNlQXN5bmMgPSB0aGlzLnBhcnNlQXN5bmMuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zYWZlUGFyc2VBc3luYyA9IHRoaXMuc2FmZVBhcnNlQXN5bmMuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zcGEgPSB0aGlzLnNwYS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnJlZmluZSA9IHRoaXMucmVmaW5lLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucmVmaW5lbWVudCA9IHRoaXMucmVmaW5lbWVudC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnN1cGVyUmVmaW5lID0gdGhpcy5zdXBlclJlZmluZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9wdGlvbmFsID0gdGhpcy5vcHRpb25hbC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm51bGxhYmxlID0gdGhpcy5udWxsYWJsZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm51bGxpc2ggPSB0aGlzLm51bGxpc2guYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5hcnJheSA9IHRoaXMuYXJyYXkuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5wcm9taXNlID0gdGhpcy5wcm9taXNlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub3IgPSB0aGlzLm9yLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYW5kID0gdGhpcy5hbmQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmJyYW5kID0gdGhpcy5icmFuZC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmRlZmF1bHQgPSB0aGlzLmRlZmF1bHQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5jYXRjaCA9IHRoaXMuY2F0Y2guYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5kZXNjcmliZSA9IHRoaXMuZGVzY3JpYmUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5waXBlID0gdGhpcy5waXBlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucmVhZG9ubHkgPSB0aGlzLnJlYWRvbmx5LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaXNOdWxsYWJsZSA9IHRoaXMuaXNOdWxsYWJsZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmlzT3B0aW9uYWwgPSB0aGlzLmlzT3B0aW9uYWwuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpc1tcIn5zdGFuZGFyZFwiXSA9IHtcbiAgICAgICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgICAgICB2ZW5kb3I6IFwiem9kXCIsXG4gICAgICAgICAgICB2YWxpZGF0ZTogKGRhdGEpID0+IHRoaXNbXCJ+dmFsaWRhdGVcIl0oZGF0YSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIG9wdGlvbmFsKCkge1xuICAgICAgICByZXR1cm4gWm9kT3B0aW9uYWwuY3JlYXRlKHRoaXMsIHRoaXMuX2RlZik7XG4gICAgfVxuICAgIG51bGxhYmxlKCkge1xuICAgICAgICByZXR1cm4gWm9kTnVsbGFibGUuY3JlYXRlKHRoaXMsIHRoaXMuX2RlZik7XG4gICAgfVxuICAgIG51bGxpc2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm51bGxhYmxlKCkub3B0aW9uYWwoKTtcbiAgICB9XG4gICAgYXJyYXkoKSB7XG4gICAgICAgIHJldHVybiBab2RBcnJheS5jcmVhdGUodGhpcyk7XG4gICAgfVxuICAgIHByb21pc2UoKSB7XG4gICAgICAgIHJldHVybiBab2RQcm9taXNlLmNyZWF0ZSh0aGlzLCB0aGlzLl9kZWYpO1xuICAgIH1cbiAgICBvcihvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIFpvZFVuaW9uLmNyZWF0ZShbdGhpcywgb3B0aW9uXSwgdGhpcy5fZGVmKTtcbiAgICB9XG4gICAgYW5kKGluY29taW5nKSB7XG4gICAgICAgIHJldHVybiBab2RJbnRlcnNlY3Rpb24uY3JlYXRlKHRoaXMsIGluY29taW5nLCB0aGlzLl9kZWYpO1xuICAgIH1cbiAgICB0cmFuc2Zvcm0odHJhbnNmb3JtKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kRWZmZWN0cyh7XG4gICAgICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHRoaXMuX2RlZiksXG4gICAgICAgICAgICBzY2hlbWE6IHRoaXMsXG4gICAgICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVmZmVjdHMsXG4gICAgICAgICAgICBlZmZlY3Q6IHsgdHlwZTogXCJ0cmFuc2Zvcm1cIiwgdHJhbnNmb3JtIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkZWZhdWx0KGRlZikge1xuICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWVGdW5jID0gdHlwZW9mIGRlZiA9PT0gXCJmdW5jdGlvblwiID8gZGVmIDogKCkgPT4gZGVmO1xuICAgICAgICByZXR1cm4gbmV3IFpvZERlZmF1bHQoe1xuICAgICAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyh0aGlzLl9kZWYpLFxuICAgICAgICAgICAgaW5uZXJUeXBlOiB0aGlzLFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWVGdW5jLFxuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2REZWZhdWx0LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgYnJhbmQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kQnJhbmRlZCh7XG4gICAgICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEJyYW5kZWQsXG4gICAgICAgICAgICB0eXBlOiB0aGlzLFxuICAgICAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyh0aGlzLl9kZWYpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2F0Y2goZGVmKSB7XG4gICAgICAgIGNvbnN0IGNhdGNoVmFsdWVGdW5jID0gdHlwZW9mIGRlZiA9PT0gXCJmdW5jdGlvblwiID8gZGVmIDogKCkgPT4gZGVmO1xuICAgICAgICByZXR1cm4gbmV3IFpvZENhdGNoKHtcbiAgICAgICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXModGhpcy5fZGVmKSxcbiAgICAgICAgICAgIGlubmVyVHlwZTogdGhpcyxcbiAgICAgICAgICAgIGNhdGNoVmFsdWU6IGNhdGNoVmFsdWVGdW5jLFxuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RDYXRjaCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRlc2NyaWJlKGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGNvbnN0IFRoaXMgPSB0aGlzLmNvbnN0cnVjdG9yO1xuICAgICAgICByZXR1cm4gbmV3IFRoaXMoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwaXBlKHRhcmdldCkge1xuICAgICAgICByZXR1cm4gWm9kUGlwZWxpbmUuY3JlYXRlKHRoaXMsIHRhcmdldCk7XG4gICAgfVxuICAgIHJlYWRvbmx5KCkge1xuICAgICAgICByZXR1cm4gWm9kUmVhZG9ubHkuY3JlYXRlKHRoaXMpO1xuICAgIH1cbiAgICBpc09wdGlvbmFsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zYWZlUGFyc2UodW5kZWZpbmVkKS5zdWNjZXNzO1xuICAgIH1cbiAgICBpc051bGxhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zYWZlUGFyc2UobnVsbCkuc3VjY2VzcztcbiAgICB9XG59XG5jb25zdCBjdWlkUmVnZXggPSAvXmNbXlxccy1dezgsfSQvaTtcbmNvbnN0IGN1aWQyUmVnZXggPSAvXlswLTlhLXpdKyQvO1xuY29uc3QgdWxpZFJlZ2V4ID0gL15bMC05QS1ISktNTlAtVFYtWl17MjZ9JC9pO1xuLy8gY29uc3QgdXVpZFJlZ2V4ID1cbi8vICAgL14oW2EtZjAtOV17OH0tW2EtZjAtOV17NH0tWzEtNV1bYS1mMC05XXszfS1bYS1mMC05XXs0fS1bYS1mMC05XXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwKSQvaTtcbmNvbnN0IHV1aWRSZWdleCA9IC9eWzAtOWEtZkEtRl17OH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17MTJ9JC9pO1xuY29uc3QgbmFub2lkUmVnZXggPSAvXlthLXowLTlfLV17MjF9JC9pO1xuY29uc3Qgand0UmVnZXggPSAvXltBLVphLXowLTktX10rXFwuW0EtWmEtejAtOS1fXStcXC5bQS1aYS16MC05LV9dKiQvO1xuY29uc3QgZHVyYXRpb25SZWdleCA9IC9eWy0rXT9QKD8hJCkoPzooPzpbLStdP1xcZCtZKXwoPzpbLStdP1xcZCtbLixdXFxkK1kkKSk/KD86KD86Wy0rXT9cXGQrTSl8KD86Wy0rXT9cXGQrWy4sXVxcZCtNJCkpPyg/Oig/OlstK10/XFxkK1cpfCg/OlstK10/XFxkK1suLF1cXGQrVyQpKT8oPzooPzpbLStdP1xcZCtEKXwoPzpbLStdP1xcZCtbLixdXFxkK0QkKSk/KD86VCg/PVtcXGQrLV0pKD86KD86Wy0rXT9cXGQrSCl8KD86Wy0rXT9cXGQrWy4sXVxcZCtIJCkpPyg/Oig/OlstK10/XFxkK00pfCg/OlstK10/XFxkK1suLF1cXGQrTSQpKT8oPzpbLStdP1xcZCsoPzpbLixdXFxkKyk/Uyk/KT8/JC87XG4vLyBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80NjE4MS8xNTUwMTU1XG4vLyBvbGQgdmVyc2lvbjogdG9vIHNsb3csIGRpZG4ndCBzdXBwb3J0IHVuaWNvZGVcbi8vIGNvbnN0IGVtYWlsUmVnZXggPSAvXigoKFthLXpdfFxcZHxbISNcXCQlJidcXCpcXCtcXC1cXC89XFw/XFxeX2B7XFx8fX5dfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSsoXFwuKFthLXpdfFxcZHxbISNcXCQlJidcXCpcXCtcXC1cXC89XFw/XFxeX2B7XFx8fX5dfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSspKil8KChcXHgyMikoKCgoXFx4MjB8XFx4MDkpKihcXHgwZFxceDBhKSk/KFxceDIwfFxceDA5KSspPygoW1xceDAxLVxceDA4XFx4MGJcXHgwY1xceDBlLVxceDFmXFx4N2ZdfFxceDIxfFtcXHgyMy1cXHg1Yl18W1xceDVkLVxceDdlXXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KFxcXFwoW1xceDAxLVxceDA5XFx4MGJcXHgwY1xceDBkLVxceDdmXXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkpKSkqKCgoXFx4MjB8XFx4MDkpKihcXHgwZFxceDBhKSk/KFxceDIwfFxceDA5KSspPyhcXHgyMikpKUAoKChbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCgoW2Etel18XFxkfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKShbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSooW2Etel18XFxkfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSkpXFwuKSsoKFthLXpdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoKFthLXpdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKShbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSooW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSkkL2k7XG4vL29sZCBlbWFpbCByZWdleFxuLy8gY29uc3QgZW1haWxSZWdleCA9IC9eKChbXjw+KClbXFxdLiw7Olxcc0BcIl0rKFxcLltePD4oKVtcXF0uLDs6XFxzQFwiXSspKil8KFwiLitcIikpQCgoPyEtKShbXjw+KClbXFxdLiw7Olxcc0BcIl0rXFwuKStbXjw+KClbXFxdLiw7Olxcc0BcIl17MSx9KVteLTw+KClbXFxdLiw7Olxcc0BcIl0kL2k7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbi8vIGNvbnN0IGVtYWlsUmVnZXggPVxuLy8gICAvXigoW148PigpW1xcXVxcXFwuLDs6XFxzQFxcXCJdKyhcXC5bXjw+KClbXFxdXFxcXC4sOzpcXHNAXFxcIl0rKSopfChcXFwiLitcXFwiKSlAKChcXFsoKCgyNVswLTVdKXwoMlswLTRdWzAtOV0pfCgxWzAtOV17Mn0pfChbMC05XXsxLDJ9KSlcXC4pezN9KCgyNVswLTVdKXwoMlswLTRdWzAtOV0pfCgxWzAtOV17Mn0pfChbMC05XXsxLDJ9KSlcXF0pfChcXFtJUHY2OigoW2EtZjAtOV17MSw0fTopezd9fDo6KFthLWYwLTldezEsNH06KXswLDZ9fChbYS1mMC05XXsxLDR9Oil7MX06KFthLWYwLTldezEsNH06KXswLDV9fChbYS1mMC05XXsxLDR9Oil7Mn06KFthLWYwLTldezEsNH06KXswLDR9fChbYS1mMC05XXsxLDR9Oil7M306KFthLWYwLTldezEsNH06KXswLDN9fChbYS1mMC05XXsxLDR9Oil7NH06KFthLWYwLTldezEsNH06KXswLDJ9fChbYS1mMC05XXsxLDR9Oil7NX06KFthLWYwLTldezEsNH06KXswLDF9KShbYS1mMC05XXsxLDR9fCgoKDI1WzAtNV0pfCgyWzAtNF1bMC05XSl8KDFbMC05XXsyfSl8KFswLTldezEsMn0pKVxcLil7M30oKDI1WzAtNV0pfCgyWzAtNF1bMC05XSl8KDFbMC05XXsyfSl8KFswLTldezEsMn0pKSlcXF0pfChbQS1aYS16MC05XShbQS1aYS16MC05LV0qW0EtWmEtejAtOV0pKihcXC5bQS1aYS16XXsyLH0pKykpJC87XG4vLyBjb25zdCBlbWFpbFJlZ2V4ID1cbi8vICAgL15bYS16QS1aMC05XFwuXFwhXFwjXFwkXFwlXFwmXFwnXFwqXFwrXFwvXFw9XFw/XFxeXFxfXFxgXFx7XFx8XFx9XFx+XFwtXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLztcbi8vIGNvbnN0IGVtYWlsUmVnZXggPVxuLy8gICAvXig/OlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSsoPzpcXC5bYS16MC05ISMkJSYnKisvPT9eX2B7fH1+LV0rKSp8XCIoPzpbXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHgyMVxceDIzLVxceDViXFx4NWQtXFx4N2ZdfFxcXFxbXFx4MDEtXFx4MDlcXHgwYlxceDBjXFx4MGUtXFx4N2ZdKSpcIilAKD86KD86W2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP1xcLikrW2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP3xcXFsoPzooPzoyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldP3xbYS16MC05LV0qW2EtejAtOV06KD86W1xceDAxLVxceDA4XFx4MGJcXHgwY1xceDBlLVxceDFmXFx4MjEtXFx4NWFcXHg1My1cXHg3Zl18XFxcXFtcXHgwMS1cXHgwOVxceDBiXFx4MGNcXHgwZS1cXHg3Zl0pKylcXF0pJC9pO1xuY29uc3QgZW1haWxSZWdleCA9IC9eKD8hXFwuKSg/IS4qXFwuXFwuKShbQS1aMC05XycrXFwtXFwuXSopW0EtWjAtOV8rLV1AKFtBLVowLTldW0EtWjAtOVxcLV0qXFwuKStbQS1aXXsyLH0kL2k7XG4vLyBjb25zdCBlbWFpbFJlZ2V4ID1cbi8vICAgL15bYS16MC05LiEjJCUm4oCZKisvPT9eX2B7fH1+LV0rQFthLXowLTktXSsoPzpcXC5bYS16MC05XFwtXSspKiQvaTtcbi8vIGZyb20gaHR0cHM6Ly90aGVrZXZpbnNjb3R0LmNvbS9lbW9qaXMtaW4tamF2YXNjcmlwdC8jd3JpdGluZy1hLXJlZ3VsYXItZXhwcmVzc2lvblxuY29uc3QgX2Vtb2ppUmVnZXggPSBgXihcXFxccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9fFxcXFxwe0Vtb2ppX0NvbXBvbmVudH0pKyRgO1xubGV0IGVtb2ppUmVnZXg7XG4vLyBmYXN0ZXIsIHNpbXBsZXIsIHNhZmVyXG5jb25zdCBpcHY0UmVnZXggPSAvXig/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcXC4pezN9KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKSQvO1xuY29uc3QgaXB2NENpZHJSZWdleCA9IC9eKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVxcLil7M30oPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXFwvKDNbMC0yXXxbMTJdP1swLTldKSQvO1xuLy8gY29uc3QgaXB2NlJlZ2V4ID1cbi8vIC9eKChbYS1mMC05XXsxLDR9Oil7N318OjooW2EtZjAtOV17MSw0fTopezAsNn18KFthLWYwLTldezEsNH06KXsxfTooW2EtZjAtOV17MSw0fTopezAsNX18KFthLWYwLTldezEsNH06KXsyfTooW2EtZjAtOV17MSw0fTopezAsNH18KFthLWYwLTldezEsNH06KXszfTooW2EtZjAtOV17MSw0fTopezAsM318KFthLWYwLTldezEsNH06KXs0fTooW2EtZjAtOV17MSw0fTopezAsMn18KFthLWYwLTldezEsNH06KXs1fTooW2EtZjAtOV17MSw0fTopezAsMX0pKFthLWYwLTldezEsNH18KCgoMjVbMC01XSl8KDJbMC00XVswLTldKXwoMVswLTldezJ9KXwoWzAtOV17MSwyfSkpXFwuKXszfSgoMjVbMC01XSl8KDJbMC00XVswLTldKXwoMVswLTldezJ9KXwoWzAtOV17MSwyfSkpKSQvO1xuY29uc3QgaXB2NlJlZ2V4ID0gL14oKFswLTlhLWZBLUZdezEsNH06KXs3LDd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopfGZlODA6KDpbMC05YS1mQS1GXXswLDR9KXswLDR9JVswLTlhLXpBLVpdezEsfXw6OihmZmZmKDowezEsNH0pezAsMX06KXswLDF9KCgyNVswLTVdfCgyWzAtNF18MXswLDF9WzAtOV0pezAsMX1bMC05XSlcXC4pezMsM30oMjVbMC01XXwoMlswLTRdfDF7MCwxfVswLTldKXswLDF9WzAtOV0pfChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fTooKDI1WzAtNV18KDJbMC00XXwxezAsMX1bMC05XSl7MCwxfVswLTldKVxcLil7MywzfSgyNVswLTVdfCgyWzAtNF18MXswLDF9WzAtOV0pezAsMX1bMC05XSkpJC87XG5jb25zdCBpcHY2Q2lkclJlZ2V4ID0gL14oKFswLTlhLWZBLUZdezEsNH06KXs3LDd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopfGZlODA6KDpbMC05YS1mQS1GXXswLDR9KXswLDR9JVswLTlhLXpBLVpdezEsfXw6OihmZmZmKDowezEsNH0pezAsMX06KXswLDF9KCgyNVswLTVdfCgyWzAtNF18MXswLDF9WzAtOV0pezAsMX1bMC05XSlcXC4pezMsM30oMjVbMC01XXwoMlswLTRdfDF7MCwxfVswLTldKXswLDF9WzAtOV0pfChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fTooKDI1WzAtNV18KDJbMC00XXwxezAsMX1bMC05XSl7MCwxfVswLTldKVxcLil7MywzfSgyNVswLTVdfCgyWzAtNF18MXswLDF9WzAtOV0pezAsMX1bMC05XSkpXFwvKDEyWzAtOF18MVswMV1bMC05XXxbMS05XT9bMC05XSkkLztcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc4NjAzOTIvZGV0ZXJtaW5lLWlmLXN0cmluZy1pcy1pbi1iYXNlNjQtdXNpbmctamF2YXNjcmlwdFxuY29uc3QgYmFzZTY0UmVnZXggPSAvXihbMC05YS16QS1aKy9dezR9KSooKFswLTlhLXpBLVorL117Mn09PSl8KFswLTlhLXpBLVorL117M309KSk/JC87XG4vLyBodHRwczovL2Jhc2U2NC5ndXJ1L3N0YW5kYXJkcy9iYXNlNjR1cmxcbmNvbnN0IGJhc2U2NHVybFJlZ2V4ID0gL14oWzAtOWEtekEtWi1fXXs0fSkqKChbMC05YS16QS1aLV9dezJ9KD09KT8pfChbMC05YS16QS1aLV9dezN9KD0pPykpPyQvO1xuLy8gc2ltcGxlXG4vLyBjb25zdCBkYXRlUmVnZXhTb3VyY2UgPSBgXFxcXGR7NH0tXFxcXGR7Mn0tXFxcXGR7Mn1gO1xuLy8gbm8gbGVhcCB5ZWFyIHZhbGlkYXRpb25cbi8vIGNvbnN0IGRhdGVSZWdleFNvdXJjZSA9IGBcXFxcZHs0fS0oKDBbMTM1NzhdfDEwfDEyKS0zMXwoMFsxMy05XXwxWzAtMl0pLTMwfCgwWzEtOV18MVswLTJdKS0oMFsxLTldfDFcXFxcZHwyXFxcXGQpKWA7XG4vLyB3aXRoIGxlYXAgeWVhciB2YWxpZGF0aW9uXG5jb25zdCBkYXRlUmVnZXhTb3VyY2UgPSBgKChcXFxcZFxcXFxkWzI0NjhdWzA0OF18XFxcXGRcXFxcZFsxMzU3OV1bMjZdfFxcXFxkXFxcXGQwWzQ4XXxbMDI0NjhdWzA0OF0wMHxbMTM1NzldWzI2XTAwKS0wMi0yOXxcXFxcZHs0fS0oKDBbMTM1NzhdfDFbMDJdKS0oMFsxLTldfFsxMl1cXFxcZHwzWzAxXSl8KDBbNDY5XXwxMSktKDBbMS05XXxbMTJdXFxcXGR8MzApfCgwMiktKDBbMS05XXwxXFxcXGR8MlswLThdKSkpYDtcbmNvbnN0IGRhdGVSZWdleCA9IG5ldyBSZWdFeHAoYF4ke2RhdGVSZWdleFNvdXJjZX0kYCk7XG5mdW5jdGlvbiB0aW1lUmVnZXhTb3VyY2UoYXJncykge1xuICAgIGxldCBzZWNvbmRzUmVnZXhTb3VyY2UgPSBgWzAtNV1cXFxcZGA7XG4gICAgaWYgKGFyZ3MucHJlY2lzaW9uKSB7XG4gICAgICAgIHNlY29uZHNSZWdleFNvdXJjZSA9IGAke3NlY29uZHNSZWdleFNvdXJjZX1cXFxcLlxcXFxkeyR7YXJncy5wcmVjaXNpb259fWA7XG4gICAgfVxuICAgIGVsc2UgaWYgKGFyZ3MucHJlY2lzaW9uID09IG51bGwpIHtcbiAgICAgICAgc2Vjb25kc1JlZ2V4U291cmNlID0gYCR7c2Vjb25kc1JlZ2V4U291cmNlfShcXFxcLlxcXFxkKyk/YDtcbiAgICB9XG4gICAgY29uc3Qgc2Vjb25kc1F1YW50aWZpZXIgPSBhcmdzLnByZWNpc2lvbiA/IFwiK1wiIDogXCI/XCI7IC8vIHJlcXVpcmUgc2Vjb25kcyBpZiBwcmVjaXNpb24gaXMgbm9uemVyb1xuICAgIHJldHVybiBgKFswMV1cXFxcZHwyWzAtM10pOlswLTVdXFxcXGQoOiR7c2Vjb25kc1JlZ2V4U291cmNlfSkke3NlY29uZHNRdWFudGlmaWVyfWA7XG59XG5mdW5jdGlvbiB0aW1lUmVnZXgoYXJncykge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeJHt0aW1lUmVnZXhTb3VyY2UoYXJncyl9JGApO1xufVxuLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zMTQzMjMxXG5leHBvcnQgZnVuY3Rpb24gZGF0ZXRpbWVSZWdleChhcmdzKSB7XG4gICAgbGV0IHJlZ2V4ID0gYCR7ZGF0ZVJlZ2V4U291cmNlfVQke3RpbWVSZWdleFNvdXJjZShhcmdzKX1gO1xuICAgIGNvbnN0IG9wdHMgPSBbXTtcbiAgICBvcHRzLnB1c2goYXJncy5sb2NhbCA/IGBaP2AgOiBgWmApO1xuICAgIGlmIChhcmdzLm9mZnNldClcbiAgICAgICAgb3B0cy5wdXNoKGAoWystXVxcXFxkezJ9Oj9cXFxcZHsyfSlgKTtcbiAgICByZWdleCA9IGAke3JlZ2V4fSgke29wdHMuam9pbihcInxcIil9KWA7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4ke3JlZ2V4fSRgKTtcbn1cbmZ1bmN0aW9uIGlzVmFsaWRJUChpcCwgdmVyc2lvbikge1xuICAgIGlmICgodmVyc2lvbiA9PT0gXCJ2NFwiIHx8ICF2ZXJzaW9uKSAmJiBpcHY0UmVnZXgudGVzdChpcCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICgodmVyc2lvbiA9PT0gXCJ2NlwiIHx8ICF2ZXJzaW9uKSAmJiBpcHY2UmVnZXgudGVzdChpcCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzVmFsaWRKV1Qoand0LCBhbGcpIHtcbiAgICBpZiAoIWp3dFJlZ2V4LnRlc3Qoand0KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IFtoZWFkZXJdID0gand0LnNwbGl0KFwiLlwiKTtcbiAgICAgICAgaWYgKCFoZWFkZXIpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIENvbnZlcnQgYmFzZTY0dXJsIHRvIGJhc2U2NFxuICAgICAgICBjb25zdCBiYXNlNjQgPSBoZWFkZXJcbiAgICAgICAgICAgIC5yZXBsYWNlKC8tL2csIFwiK1wiKVxuICAgICAgICAgICAgLnJlcGxhY2UoL18vZywgXCIvXCIpXG4gICAgICAgICAgICAucGFkRW5kKGhlYWRlci5sZW5ndGggKyAoKDQgLSAoaGVhZGVyLmxlbmd0aCAlIDQpKSAlIDQpLCBcIj1cIik7XG4gICAgICAgIGNvbnN0IGRlY29kZWQgPSBKU09OLnBhcnNlKGF0b2IoYmFzZTY0KSk7XG4gICAgICAgIGlmICh0eXBlb2YgZGVjb2RlZCAhPT0gXCJvYmplY3RcIiB8fCBkZWNvZGVkID09PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoXCJ0eXBcIiBpbiBkZWNvZGVkICYmIGRlY29kZWQ/LnR5cCAhPT0gXCJKV1RcIilcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCFkZWNvZGVkLmFsZylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGFsZyAmJiBkZWNvZGVkLmFsZyAhPT0gYWxnKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNWYWxpZENpZHIoaXAsIHZlcnNpb24pIHtcbiAgICBpZiAoKHZlcnNpb24gPT09IFwidjRcIiB8fCAhdmVyc2lvbikgJiYgaXB2NENpZHJSZWdleC50ZXN0KGlwKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCh2ZXJzaW9uID09PSBcInY2XCIgfHwgIXZlcnNpb24pICYmIGlwdjZDaWRyUmVnZXgudGVzdChpcCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydCBjbGFzcyBab2RTdHJpbmcgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlZi5jb2VyY2UpIHtcbiAgICAgICAgICAgIGlucHV0LmRhdGEgPSBTdHJpbmcoaW5wdXQuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5zdHJpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUuc3RyaW5nLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhdHVzID0gbmV3IFBhcnNlU3RhdHVzKCk7XG4gICAgICAgIGxldCBjdHggPSB1bmRlZmluZWQ7XG4gICAgICAgIGZvciAoY29uc3QgY2hlY2sgb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoZWNrLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuZGF0YS5sZW5ndGggPCBjaGVjay52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX3NtYWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluaW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuZGF0YS5sZW5ndGggPiBjaGVjay52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX2JpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heGltdW06IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImxlbmd0aFwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9vQmlnID0gaW5wdXQuZGF0YS5sZW5ndGggPiBjaGVjay52YWx1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCB0b29TbWFsbCA9IGlucHV0LmRhdGEubGVuZ3RoIDwgY2hlY2sudmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKHRvb0JpZyB8fCB0b29TbWFsbCkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRvb0JpZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRvb1NtYWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX3NtYWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltdW06IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImVtYWlsXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWVtYWlsUmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcImVtYWlsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJlbW9qaVwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFlbW9qaVJlZ2V4KSB7XG4gICAgICAgICAgICAgICAgICAgIGVtb2ppUmVnZXggPSBuZXcgUmVnRXhwKF9lbW9qaVJlZ2V4LCBcInVcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghZW1vamlSZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiZW1vamlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcInV1aWRcIikge1xuICAgICAgICAgICAgICAgIGlmICghdXVpZFJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJ1dWlkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJuYW5vaWRcIikge1xuICAgICAgICAgICAgICAgIGlmICghbmFub2lkUmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcIm5hbm9pZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiY3VpZFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjdWlkUmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcImN1aWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImN1aWQyXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWN1aWQyUmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcImN1aWQyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJ1bGlkXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXVsaWRSZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwidWxpZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwidXJsXCIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBuZXcgVVJMKGlucHV0LmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwidXJsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJyZWdleFwiKSB7XG4gICAgICAgICAgICAgICAgY2hlY2sucmVnZXgubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXN0UmVzdWx0ID0gY2hlY2sucmVnZXgudGVzdChpbnB1dC5kYXRhKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRlc3RSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJyZWdleFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwidHJpbVwiKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQuZGF0YSA9IGlucHV0LmRhdGEudHJpbSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJpbmNsdWRlc1wiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpbnB1dC5kYXRhLmluY2x1ZGVzKGNoZWNrLnZhbHVlLCBjaGVjay5wb3NpdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogeyBpbmNsdWRlczogY2hlY2sudmFsdWUsIHBvc2l0aW9uOiBjaGVjay5wb3NpdGlvbiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwidG9Mb3dlckNhc2VcIikge1xuICAgICAgICAgICAgICAgIGlucHV0LmRhdGEgPSBpbnB1dC5kYXRhLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcInRvVXBwZXJDYXNlXCIpIHtcbiAgICAgICAgICAgICAgICBpbnB1dC5kYXRhID0gaW5wdXQuZGF0YS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJzdGFydHNXaXRoXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlucHV0LmRhdGEuc3RhcnRzV2l0aChjaGVjay52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogeyBzdGFydHNXaXRoOiBjaGVjay52YWx1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiZW5kc1dpdGhcIikge1xuICAgICAgICAgICAgICAgIGlmICghaW5wdXQuZGF0YS5lbmRzV2l0aChjaGVjay52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogeyBlbmRzV2l0aDogY2hlY2sudmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImRhdGV0aW1lXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWdleCA9IGRhdGV0aW1lUmVnZXgoY2hlY2spO1xuICAgICAgICAgICAgICAgIGlmICghcmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcImRhdGV0aW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJkYXRlXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWdleCA9IGRhdGVSZWdleDtcbiAgICAgICAgICAgICAgICBpZiAoIXJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJ0aW1lXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWdleCA9IHRpbWVSZWdleChjaGVjayk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwidGltZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiZHVyYXRpb25cIikge1xuICAgICAgICAgICAgICAgIGlmICghZHVyYXRpb25SZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiZHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImlwXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRJUChpbnB1dC5kYXRhLCBjaGVjay52ZXJzaW9uKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcImlwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJqd3RcIikge1xuICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZEpXVChpbnB1dC5kYXRhLCBjaGVjay5hbGcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiand0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJjaWRyXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRDaWRyKGlucHV0LmRhdGEsIGNoZWNrLnZlcnNpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiY2lkclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiYmFzZTY0XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWJhc2U2NFJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJiYXNlNjRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImJhc2U2NHVybFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFiYXNlNjR1cmxSZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiYmFzZTY0dXJsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdXRpbC5hc3NlcnROZXZlcihjaGVjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBpbnB1dC5kYXRhIH07XG4gICAgfVxuICAgIF9yZWdleChyZWdleCwgdmFsaWRhdGlvbiwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZpbmVtZW50KChkYXRhKSA9PiByZWdleC50ZXN0KGRhdGEpLCB7XG4gICAgICAgICAgICB2YWxpZGF0aW9uLFxuICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2FkZENoZWNrKGNoZWNrKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kU3RyaW5nKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNoZWNrczogWy4uLnRoaXMuX2RlZi5jaGVja3MsIGNoZWNrXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVtYWlsKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJlbWFpbFwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSkgfSk7XG4gICAgfVxuICAgIHVybChtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwidXJsXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgZW1vamkobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImVtb2ppXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgdXVpZChtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwidXVpZFwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSkgfSk7XG4gICAgfVxuICAgIG5hbm9pZChtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwibmFub2lkXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgY3VpZChtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiY3VpZFwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSkgfSk7XG4gICAgfVxuICAgIGN1aWQyKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJjdWlkMlwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSkgfSk7XG4gICAgfVxuICAgIHVsaWQobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcInVsaWRcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICBiYXNlNjQobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImJhc2U2NFwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSkgfSk7XG4gICAgfVxuICAgIGJhc2U2NHVybChtZXNzYWdlKSB7XG4gICAgICAgIC8vIGJhc2U2NHVybCBlbmNvZGluZyBpcyBhIG1vZGlmaWNhdGlvbiBvZiBiYXNlNjQgdGhhdCBjYW4gc2FmZWx5IGJlIHVzZWQgaW4gVVJMcyBhbmQgZmlsZW5hbWVzXG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcImJhc2U2NHVybFwiLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgand0KG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJqd3RcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG9wdGlvbnMpIH0pO1xuICAgIH1cbiAgICBpcChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiaXBcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG9wdGlvbnMpIH0pO1xuICAgIH1cbiAgICBjaWRyKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJjaWRyXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihvcHRpb25zKSB9KTtcbiAgICB9XG4gICAgZGF0ZXRpbWUob3B0aW9ucykge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICAgICAga2luZDogXCJkYXRldGltZVwiLFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogbnVsbCxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxvY2FsOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBvcHRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwiZGF0ZXRpbWVcIixcbiAgICAgICAgICAgIHByZWNpc2lvbjogdHlwZW9mIG9wdGlvbnM/LnByZWNpc2lvbiA9PT0gXCJ1bmRlZmluZWRcIiA/IG51bGwgOiBvcHRpb25zPy5wcmVjaXNpb24sXG4gICAgICAgICAgICBvZmZzZXQ6IG9wdGlvbnM/Lm9mZnNldCA/PyBmYWxzZSxcbiAgICAgICAgICAgIGxvY2FsOiBvcHRpb25zPy5sb2NhbCA/PyBmYWxzZSxcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihvcHRpb25zPy5tZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRhdGUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImRhdGVcIiwgbWVzc2FnZSB9KTtcbiAgICB9XG4gICAgdGltZShvcHRpb25zKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgICAgICBraW5kOiBcInRpbWVcIixcbiAgICAgICAgICAgICAgICBwcmVjaXNpb246IG51bGwsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogb3B0aW9ucyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcInRpbWVcIixcbiAgICAgICAgICAgIHByZWNpc2lvbjogdHlwZW9mIG9wdGlvbnM/LnByZWNpc2lvbiA9PT0gXCJ1bmRlZmluZWRcIiA/IG51bGwgOiBvcHRpb25zPy5wcmVjaXNpb24sXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoob3B0aW9ucz8ubWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkdXJhdGlvbihtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiZHVyYXRpb25cIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICByZWdleChyZWdleCwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJyZWdleFwiLFxuICAgICAgICAgICAgcmVnZXg6IHJlZ2V4LFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaW5jbHVkZXModmFsdWUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwiaW5jbHVkZXNcIixcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBvcHRpb25zPy5wb3NpdGlvbixcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihvcHRpb25zPy5tZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHN0YXJ0c1dpdGgodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwic3RhcnRzV2l0aFwiLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZW5kc1dpdGgodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwiZW5kc1dpdGhcIixcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG1pbihtaW5MZW5ndGgsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWluXCIsXG4gICAgICAgICAgICB2YWx1ZTogbWluTGVuZ3RoLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbWF4KG1heExlbmd0aCwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtYXhcIixcbiAgICAgICAgICAgIHZhbHVlOiBtYXhMZW5ndGgsXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBsZW5ndGgobGVuLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcImxlbmd0aFwiLFxuICAgICAgICAgICAgdmFsdWU6IGxlbixcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVxdWl2YWxlbnQgdG8gYC5taW4oMSlgXG4gICAgICovXG4gICAgbm9uZW1wdHkobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5taW4oMSwgZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgdHJpbSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RTdHJpbmcoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbLi4udGhpcy5fZGVmLmNoZWNrcywgeyBraW5kOiBcInRyaW1cIiB9XSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRvTG93ZXJDYXNlKCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFN0cmluZyh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFsuLi50aGlzLl9kZWYuY2hlY2tzLCB7IGtpbmQ6IFwidG9Mb3dlckNhc2VcIiB9XSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRvVXBwZXJDYXNlKCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFN0cmluZyh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFsuLi50aGlzLl9kZWYuY2hlY2tzLCB7IGtpbmQ6IFwidG9VcHBlckNhc2VcIiB9XSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBpc0RhdGV0aW1lKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImRhdGV0aW1lXCIpO1xuICAgIH1cbiAgICBnZXQgaXNEYXRlKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImRhdGVcIik7XG4gICAgfVxuICAgIGdldCBpc1RpbWUoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwidGltZVwiKTtcbiAgICB9XG4gICAgZ2V0IGlzRHVyYXRpb24oKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiZHVyYXRpb25cIik7XG4gICAgfVxuICAgIGdldCBpc0VtYWlsKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImVtYWlsXCIpO1xuICAgIH1cbiAgICBnZXQgaXNVUkwoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwidXJsXCIpO1xuICAgIH1cbiAgICBnZXQgaXNFbW9qaSgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJlbW9qaVwiKTtcbiAgICB9XG4gICAgZ2V0IGlzVVVJRCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJ1dWlkXCIpO1xuICAgIH1cbiAgICBnZXQgaXNOQU5PSUQoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwibmFub2lkXCIpO1xuICAgIH1cbiAgICBnZXQgaXNDVUlEKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImN1aWRcIik7XG4gICAgfVxuICAgIGdldCBpc0NVSUQyKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImN1aWQyXCIpO1xuICAgIH1cbiAgICBnZXQgaXNVTElEKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcInVsaWRcIik7XG4gICAgfVxuICAgIGdldCBpc0lQKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImlwXCIpO1xuICAgIH1cbiAgICBnZXQgaXNDSURSKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImNpZHJcIik7XG4gICAgfVxuICAgIGdldCBpc0Jhc2U2NCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJiYXNlNjRcIik7XG4gICAgfVxuICAgIGdldCBpc0Jhc2U2NHVybCgpIHtcbiAgICAgICAgLy8gYmFzZTY0dXJsIGVuY29kaW5nIGlzIGEgbW9kaWZpY2F0aW9uIG9mIGJhc2U2NCB0aGF0IGNhbiBzYWZlbHkgYmUgdXNlZCBpbiBVUkxzIGFuZCBmaWxlbmFtZXNcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJiYXNlNjR1cmxcIik7XG4gICAgfVxuICAgIGdldCBtaW5MZW5ndGgoKSB7XG4gICAgICAgIGxldCBtaW4gPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGNoIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaC5raW5kID09PSBcIm1pblwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1pbiA9PT0gbnVsbCB8fCBjaC52YWx1ZSA+IG1pbilcbiAgICAgICAgICAgICAgICAgICAgbWluID0gY2gudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbjtcbiAgICB9XG4gICAgZ2V0IG1heExlbmd0aCgpIHtcbiAgICAgICAgbGV0IG1heCA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF4ID09PSBudWxsIHx8IGNoLnZhbHVlIDwgbWF4KVxuICAgICAgICAgICAgICAgICAgICBtYXggPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4O1xuICAgIH1cbn1cblpvZFN0cmluZy5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RTdHJpbmcoe1xuICAgICAgICBjaGVja3M6IFtdLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFN0cmluZyxcbiAgICAgICAgY29lcmNlOiBwYXJhbXM/LmNvZXJjZSA/PyBmYWxzZSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM5NjY0ODQvd2h5LWRvZXMtbW9kdWx1cy1vcGVyYXRvci1yZXR1cm4tZnJhY3Rpb25hbC1udW1iZXItaW4tamF2YXNjcmlwdC8zMTcxMTAzNCMzMTcxMTAzNFxuZnVuY3Rpb24gZmxvYXRTYWZlUmVtYWluZGVyKHZhbCwgc3RlcCkge1xuICAgIGNvbnN0IHZhbERlY0NvdW50ID0gKHZhbC50b1N0cmluZygpLnNwbGl0KFwiLlwiKVsxXSB8fCBcIlwiKS5sZW5ndGg7XG4gICAgY29uc3Qgc3RlcERlY0NvdW50ID0gKHN0ZXAudG9TdHJpbmcoKS5zcGxpdChcIi5cIilbMV0gfHwgXCJcIikubGVuZ3RoO1xuICAgIGNvbnN0IGRlY0NvdW50ID0gdmFsRGVjQ291bnQgPiBzdGVwRGVjQ291bnQgPyB2YWxEZWNDb3VudCA6IHN0ZXBEZWNDb3VudDtcbiAgICBjb25zdCB2YWxJbnQgPSBOdW1iZXIucGFyc2VJbnQodmFsLnRvRml4ZWQoZGVjQ291bnQpLnJlcGxhY2UoXCIuXCIsIFwiXCIpKTtcbiAgICBjb25zdCBzdGVwSW50ID0gTnVtYmVyLnBhcnNlSW50KHN0ZXAudG9GaXhlZChkZWNDb3VudCkucmVwbGFjZShcIi5cIiwgXCJcIikpO1xuICAgIHJldHVybiAodmFsSW50ICUgc3RlcEludCkgLyAxMCAqKiBkZWNDb3VudDtcbn1cbmV4cG9ydCBjbGFzcyBab2ROdW1iZXIgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5taW4gPSB0aGlzLmd0ZTtcbiAgICAgICAgdGhpcy5tYXggPSB0aGlzLmx0ZTtcbiAgICAgICAgdGhpcy5zdGVwID0gdGhpcy5tdWx0aXBsZU9mO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlZi5jb2VyY2UpIHtcbiAgICAgICAgICAgIGlucHV0LmRhdGEgPSBOdW1iZXIoaW5wdXQuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5udW1iZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUubnVtYmVyLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGN0eCA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gbmV3IFBhcnNlU3RhdHVzKCk7XG4gICAgICAgIGZvciAoY29uc3QgY2hlY2sgb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoZWNrLmtpbmQgPT09IFwiaW50XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaXNJbnRlZ2VyKGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZDogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZDogXCJmbG9hdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b29TbWFsbCA9IGNoZWNrLmluY2x1c2l2ZSA/IGlucHV0LmRhdGEgPCBjaGVjay52YWx1ZSA6IGlucHV0LmRhdGEgPD0gY2hlY2sudmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKHRvb1NtYWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IGNoZWNrLmluY2x1c2l2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm1heFwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9vQmlnID0gY2hlY2suaW5jbHVzaXZlID8gaW5wdXQuZGF0YSA+IGNoZWNrLnZhbHVlIDogaW5wdXQuZGF0YSA+PSBjaGVjay52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodG9vQmlnKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fYmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiBjaGVjay5pbmNsdXNpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleGFjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJtdWx0aXBsZU9mXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmxvYXRTYWZlUmVtYWluZGVyKGlucHV0LmRhdGEsIGNoZWNrLnZhbHVlKSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUubm90X211bHRpcGxlX29mLFxuICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVPZjogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJmaW5pdGVcIikge1xuICAgICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5ub3RfZmluaXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHV0aWwuYXNzZXJ0TmV2ZXIoY2hlY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogaW5wdXQuZGF0YSB9O1xuICAgIH1cbiAgICBndGUodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtaW5cIiwgdmFsdWUsIHRydWUsIGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSk7XG4gICAgfVxuICAgIGd0KHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldExpbWl0KFwibWluXCIsIHZhbHVlLCBmYWxzZSwgZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgbHRlKHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldExpbWl0KFwibWF4XCIsIHZhbHVlLCB0cnVlLCBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkpO1xuICAgIH1cbiAgICBsdCh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRMaW1pdChcIm1heFwiLCB2YWx1ZSwgZmFsc2UsIGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSk7XG4gICAgfVxuICAgIHNldExpbWl0KGtpbmQsIHZhbHVlLCBpbmNsdXNpdmUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2ROdW1iZXIoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5fZGVmLmNoZWNrcyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGtpbmQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9hZGRDaGVjayhjaGVjaykge1xuICAgICAgICByZXR1cm4gbmV3IFpvZE51bWJlcih7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFsuLi50aGlzLl9kZWYuY2hlY2tzLCBjaGVja10sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpbnQobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJpbnRcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBvc2l0aXZlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWluXCIsXG4gICAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBuZWdhdGl2ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1heFwiLFxuICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgICBpbmNsdXNpdmU6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbm9ucG9zaXRpdmUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtYXhcIixcbiAgICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbm9ubmVnYXRpdmUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtaW5cIixcbiAgICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbXVsdGlwbGVPZih2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtdWx0aXBsZU9mXCIsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmaW5pdGUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJmaW5pdGVcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNhZmUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtaW5cIixcbiAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSkuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWF4XCIsXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXQgbWluVmFsdWUoKSB7XG4gICAgICAgIGxldCBtaW4gPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGNoIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaC5raW5kID09PSBcIm1pblwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1pbiA9PT0gbnVsbCB8fCBjaC52YWx1ZSA+IG1pbilcbiAgICAgICAgICAgICAgICAgICAgbWluID0gY2gudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbjtcbiAgICB9XG4gICAgZ2V0IG1heFZhbHVlKCkge1xuICAgICAgICBsZXQgbWF4ID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBjaCBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2gua2luZCA9PT0gXCJtYXhcIikge1xuICAgICAgICAgICAgICAgIGlmIChtYXggPT09IG51bGwgfHwgY2gudmFsdWUgPCBtYXgpXG4gICAgICAgICAgICAgICAgICAgIG1heCA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXg7XG4gICAgfVxuICAgIGdldCBpc0ludCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJpbnRcIiB8fCAoY2gua2luZCA9PT0gXCJtdWx0aXBsZU9mXCIgJiYgdXRpbC5pc0ludGVnZXIoY2gudmFsdWUpKSk7XG4gICAgfVxuICAgIGdldCBpc0Zpbml0ZSgpIHtcbiAgICAgICAgbGV0IG1heCA9IG51bGw7XG4gICAgICAgIGxldCBtaW4gPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGNoIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaC5raW5kID09PSBcImZpbml0ZVwiIHx8IGNoLmtpbmQgPT09IFwiaW50XCIgfHwgY2gua2luZCA9PT0gXCJtdWx0aXBsZU9mXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWluID09PSBudWxsIHx8IGNoLnZhbHVlID4gbWluKVxuICAgICAgICAgICAgICAgICAgICBtaW4gPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF4ID09PSBudWxsIHx8IGNoLnZhbHVlIDwgbWF4KVxuICAgICAgICAgICAgICAgICAgICBtYXggPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG1pbikgJiYgTnVtYmVyLmlzRmluaXRlKG1heCk7XG4gICAgfVxufVxuWm9kTnVtYmVyLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE51bWJlcih7XG4gICAgICAgIGNoZWNrczogW10sXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTnVtYmVyLFxuICAgICAgICBjb2VyY2U6IHBhcmFtcz8uY29lcmNlIHx8IGZhbHNlLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZXhwb3J0IGNsYXNzIFpvZEJpZ0ludCBleHRlbmRzIFpvZFR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm1pbiA9IHRoaXMuZ3RlO1xuICAgICAgICB0aGlzLm1heCA9IHRoaXMubHRlO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlZi5jb2VyY2UpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaW5wdXQuZGF0YSA9IEJpZ0ludChpbnB1dC5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0SW52YWxpZElucHV0KGlucHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLmJpZ2ludCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldEludmFsaWRJbnB1dChpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGN0eCA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gbmV3IFBhcnNlU3RhdHVzKCk7XG4gICAgICAgIGZvciAoY29uc3QgY2hlY2sgb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoZWNrLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b29TbWFsbCA9IGNoZWNrLmluY2x1c2l2ZSA/IGlucHV0LmRhdGEgPCBjaGVjay52YWx1ZSA6IGlucHV0LmRhdGEgPD0gY2hlY2sudmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKHRvb1NtYWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJpZ2ludFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluaW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IGNoZWNrLmluY2x1c2l2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm1heFwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9vQmlnID0gY2hlY2suaW5jbHVzaXZlID8gaW5wdXQuZGF0YSA+IGNoZWNrLnZhbHVlIDogaW5wdXQuZGF0YSA+PSBjaGVjay52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodG9vQmlnKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fYmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJiaWdpbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heGltdW06IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiBjaGVjay5pbmNsdXNpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJtdWx0aXBsZU9mXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuZGF0YSAlIGNoZWNrLnZhbHVlICE9PSBCaWdJbnQoMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLm5vdF9tdWx0aXBsZV9vZixcbiAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlT2Y6IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHV0aWwuYXNzZXJ0TmV2ZXIoY2hlY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogaW5wdXQuZGF0YSB9O1xuICAgIH1cbiAgICBfZ2V0SW52YWxpZElucHV0KGlucHV0KSB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUuYmlnaW50LFxuICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgfVxuICAgIGd0ZSh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRMaW1pdChcIm1pblwiLCB2YWx1ZSwgdHJ1ZSwgZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgZ3QodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtaW5cIiwgdmFsdWUsIGZhbHNlLCBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkpO1xuICAgIH1cbiAgICBsdGUodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtYXhcIiwgdmFsdWUsIHRydWUsIGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSk7XG4gICAgfVxuICAgIGx0KHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldExpbWl0KFwibWF4XCIsIHZhbHVlLCBmYWxzZSwgZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgc2V0TGltaXQoa2luZCwgdmFsdWUsIGluY2x1c2l2ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEJpZ0ludCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWYuY2hlY2tzLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAga2luZCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2FkZENoZWNrKGNoZWNrKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kQmlnSW50KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNoZWNrczogWy4uLnRoaXMuX2RlZi5jaGVja3MsIGNoZWNrXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBvc2l0aXZlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWluXCIsXG4gICAgICAgICAgICB2YWx1ZTogQmlnSW50KDApLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5lZ2F0aXZlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWF4XCIsXG4gICAgICAgICAgICB2YWx1ZTogQmlnSW50KDApLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5vbnBvc2l0aXZlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWF4XCIsXG4gICAgICAgICAgICB2YWx1ZTogQmlnSW50KDApLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbm9ubmVnYXRpdmUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtaW5cIixcbiAgICAgICAgICAgIHZhbHVlOiBCaWdJbnQoMCksXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtdWx0aXBsZU9mKHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm11bHRpcGxlT2ZcIixcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0IG1pblZhbHVlKCkge1xuICAgICAgICBsZXQgbWluID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBjaCBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2gua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGlmIChtaW4gPT09IG51bGwgfHwgY2gudmFsdWUgPiBtaW4pXG4gICAgICAgICAgICAgICAgICAgIG1pbiA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW47XG4gICAgfVxuICAgIGdldCBtYXhWYWx1ZSgpIHtcbiAgICAgICAgbGV0IG1heCA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF4ID09PSBudWxsIHx8IGNoLnZhbHVlIDwgbWF4KVxuICAgICAgICAgICAgICAgICAgICBtYXggPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4O1xuICAgIH1cbn1cblpvZEJpZ0ludC5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RCaWdJbnQoe1xuICAgICAgICBjaGVja3M6IFtdLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEJpZ0ludCxcbiAgICAgICAgY29lcmNlOiBwYXJhbXM/LmNvZXJjZSA/PyBmYWxzZSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmV4cG9ydCBjbGFzcyBab2RCb29sZWFuIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWYuY29lcmNlKSB7XG4gICAgICAgICAgICBpbnB1dC5kYXRhID0gQm9vbGVhbihpbnB1dC5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLmJvb2xlYW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUuYm9vbGVhbixcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPSyhpbnB1dC5kYXRhKTtcbiAgICB9XG59XG5ab2RCb29sZWFuLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZEJvb2xlYW4oe1xuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEJvb2xlYW4sXG4gICAgICAgIGNvZXJjZTogcGFyYW1zPy5jb2VyY2UgfHwgZmFsc2UsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kRGF0ZSBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBpZiAodGhpcy5fZGVmLmNvZXJjZSkge1xuICAgICAgICAgICAgaW5wdXQuZGF0YSA9IG5ldyBEYXRlKGlucHV0LmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUuZGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5kYXRlLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE51bWJlci5pc05hTihpbnB1dC5kYXRhLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX2RhdGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IG5ldyBQYXJzZVN0YXR1cygpO1xuICAgICAgICBsZXQgY3R4ID0gdW5kZWZpbmVkO1xuICAgICAgICBmb3IgKGNvbnN0IGNoZWNrIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaGVjay5raW5kID09PSBcIm1pblwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LmRhdGEuZ2V0VGltZSgpIDwgY2hlY2sudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleGFjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJtYXhcIikge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5kYXRhLmdldFRpbWUoKSA+IGNoZWNrLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fYmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heGltdW06IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB1dGlsLmFzc2VydE5ldmVyKGNoZWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMudmFsdWUsXG4gICAgICAgICAgICB2YWx1ZTogbmV3IERhdGUoaW5wdXQuZGF0YS5nZXRUaW1lKCkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBfYWRkQ2hlY2soY2hlY2spIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2REYXRlKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNoZWNrczogWy4uLnRoaXMuX2RlZi5jaGVja3MsIGNoZWNrXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG1pbihtaW5EYXRlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1pblwiLFxuICAgICAgICAgICAgdmFsdWU6IG1pbkRhdGUuZ2V0VGltZSgpLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbWF4KG1heERhdGUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWF4XCIsXG4gICAgICAgICAgICB2YWx1ZTogbWF4RGF0ZS5nZXRUaW1lKCksXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXQgbWluRGF0ZSgpIHtcbiAgICAgICAgbGV0IG1pbiA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWluID09PSBudWxsIHx8IGNoLnZhbHVlID4gbWluKVxuICAgICAgICAgICAgICAgICAgICBtaW4gPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluICE9IG51bGwgPyBuZXcgRGF0ZShtaW4pIDogbnVsbDtcbiAgICB9XG4gICAgZ2V0IG1heERhdGUoKSB7XG4gICAgICAgIGxldCBtYXggPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGNoIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaC5raW5kID09PSBcIm1heFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1heCA9PT0gbnVsbCB8fCBjaC52YWx1ZSA8IG1heClcbiAgICAgICAgICAgICAgICAgICAgbWF4ID0gY2gudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heCAhPSBudWxsID8gbmV3IERhdGUobWF4KSA6IG51bGw7XG4gICAgfVxufVxuWm9kRGF0ZS5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2REYXRlKHtcbiAgICAgICAgY2hlY2tzOiBbXSxcbiAgICAgICAgY29lcmNlOiBwYXJhbXM/LmNvZXJjZSB8fCBmYWxzZSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2REYXRlLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZXhwb3J0IGNsYXNzIFpvZFN5bWJvbCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLnN5bWJvbCkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5zeW1ib2wsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxufVxuWm9kU3ltYm9sLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFN5bWJvbCh7XG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kU3ltYm9sLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZXhwb3J0IGNsYXNzIFpvZFVuZGVmaW5lZCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLnVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS51bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxufVxuWm9kVW5kZWZpbmVkLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFVuZGVmaW5lZCh7XG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kVW5kZWZpbmVkLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZXhwb3J0IGNsYXNzIFpvZE51bGwgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5udWxsKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLm51bGwsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxufVxuWm9kTnVsbC5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2ROdWxsKHtcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2ROdWxsLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZXhwb3J0IGNsYXNzIFpvZEFueSBleHRlbmRzIFpvZFR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICAvLyB0byBwcmV2ZW50IGluc3RhbmNlcyBvZiBvdGhlciBjbGFzc2VzIGZyb20gZXh0ZW5kaW5nIFpvZEFueS4gdGhpcyBjYXVzZXMgaXNzdWVzIHdpdGggY2F0Y2hhbGwgaW4gWm9kT2JqZWN0LlxuICAgICAgICB0aGlzLl9hbnkgPSB0cnVlO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIE9LKGlucHV0LmRhdGEpO1xuICAgIH1cbn1cblpvZEFueS5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RBbnkoe1xuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEFueSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmV4cG9ydCBjbGFzcyBab2RVbmtub3duIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIC8vIHJlcXVpcmVkXG4gICAgICAgIHRoaXMuX3Vua25vd24gPSB0cnVlO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIE9LKGlucHV0LmRhdGEpO1xuICAgIH1cbn1cblpvZFVua25vd24uY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kVW5rbm93bih7XG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kVW5rbm93bixcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmV4cG9ydCBjbGFzcyBab2ROZXZlciBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLm5ldmVyLFxuICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgfVxufVxuWm9kTmV2ZXIuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTmV2ZXIoe1xuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE5ldmVyLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZXhwb3J0IGNsYXNzIFpvZFZvaWQgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS51bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUudm9pZCxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPSyhpbnB1dC5kYXRhKTtcbiAgICB9XG59XG5ab2RWb2lkLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFZvaWQoe1xuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFZvaWQsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kQXJyYXkgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBjdHgsIHN0YXR1cyB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgY29uc3QgZGVmID0gdGhpcy5fZGVmO1xuICAgICAgICBpZiAoY3R4LnBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUuYXJyYXkpIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUuYXJyYXksXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVmLmV4YWN0TGVuZ3RoICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCB0b29CaWcgPSBjdHguZGF0YS5sZW5ndGggPiBkZWYuZXhhY3RMZW5ndGgudmFsdWU7XG4gICAgICAgICAgICBjb25zdCB0b29TbWFsbCA9IGN0eC5kYXRhLmxlbmd0aCA8IGRlZi5leGFjdExlbmd0aC52YWx1ZTtcbiAgICAgICAgICAgIGlmICh0b29CaWcgfHwgdG9vU21hbGwpIHtcbiAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogdG9vQmlnID8gWm9kSXNzdWVDb2RlLnRvb19iaWcgOiBab2RJc3N1ZUNvZGUudG9vX3NtYWxsLFxuICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiAodG9vU21hbGwgPyBkZWYuZXhhY3RMZW5ndGgudmFsdWUgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgICAgICBtYXhpbXVtOiAodG9vQmlnID8gZGVmLmV4YWN0TGVuZ3RoLnZhbHVlIDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGV4YWN0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkZWYuZXhhY3RMZW5ndGgubWVzc2FnZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVmLm1pbkxlbmd0aCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGN0eC5kYXRhLmxlbmd0aCA8IGRlZi5taW5MZW5ndGgudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxcbiAgICAgICAgICAgICAgICAgICAgbWluaW11bTogZGVmLm1pbkxlbmd0aC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZGVmLm1pbkxlbmd0aC5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChkZWYubWF4TGVuZ3RoICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoY3R4LmRhdGEubGVuZ3RoID4gZGVmLm1heExlbmd0aC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX2JpZyxcbiAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogZGVmLm1heExlbmd0aC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZGVmLm1heExlbmd0aC5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoWy4uLmN0eC5kYXRhXS5tYXAoKGl0ZW0sIGkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVmLnR5cGUuX3BhcnNlQXN5bmMobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIGl0ZW0sIGN0eC5wYXRoLCBpKSk7XG4gICAgICAgICAgICB9KSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlU3RhdHVzLm1lcmdlQXJyYXkoc3RhdHVzLCByZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gWy4uLmN0eC5kYXRhXS5tYXAoKGl0ZW0sIGkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBkZWYudHlwZS5fcGFyc2VTeW5jKG5ldyBQYXJzZUlucHV0TGF6eVBhdGgoY3R4LCBpdGVtLCBjdHgucGF0aCwgaSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFBhcnNlU3RhdHVzLm1lcmdlQXJyYXkoc3RhdHVzLCByZXN1bHQpO1xuICAgIH1cbiAgICBnZXQgZWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi50eXBlO1xuICAgIH1cbiAgICBtaW4obWluTGVuZ3RoLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kQXJyYXkoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgbWluTGVuZ3RoOiB7IHZhbHVlOiBtaW5MZW5ndGgsIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbWF4KG1heExlbmd0aCwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEFycmF5KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIG1heExlbmd0aDogeyB2YWx1ZTogbWF4TGVuZ3RoLCBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGxlbmd0aChsZW4sIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RBcnJheSh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBleGFjdExlbmd0aDogeyB2YWx1ZTogbGVuLCBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5vbmVtcHR5KG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWluKDEsIG1lc3NhZ2UpO1xuICAgIH1cbn1cblpvZEFycmF5LmNyZWF0ZSA9IChzY2hlbWEsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kQXJyYXkoe1xuICAgICAgICB0eXBlOiBzY2hlbWEsXG4gICAgICAgIG1pbkxlbmd0aDogbnVsbCxcbiAgICAgICAgbWF4TGVuZ3RoOiBudWxsLFxuICAgICAgICBleGFjdExlbmd0aDogbnVsbCxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RBcnJheSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmZ1bmN0aW9uIGRlZXBQYXJ0aWFsaWZ5KHNjaGVtYSkge1xuICAgIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBab2RPYmplY3QpIHtcbiAgICAgICAgY29uc3QgbmV3U2hhcGUgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hLnNoYXBlKSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFNjaGVtYSA9IHNjaGVtYS5zaGFwZVtrZXldO1xuICAgICAgICAgICAgbmV3U2hhcGVba2V5XSA9IFpvZE9wdGlvbmFsLmNyZWF0ZShkZWVwUGFydGlhbGlmeShmaWVsZFNjaGVtYSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnNjaGVtYS5fZGVmLFxuICAgICAgICAgICAgc2hhcGU6ICgpID0+IG5ld1NoYXBlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgWm9kQXJyYXkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RBcnJheSh7XG4gICAgICAgICAgICAuLi5zY2hlbWEuX2RlZixcbiAgICAgICAgICAgIHR5cGU6IGRlZXBQYXJ0aWFsaWZ5KHNjaGVtYS5lbGVtZW50KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFpvZE9wdGlvbmFsKSB7XG4gICAgICAgIHJldHVybiBab2RPcHRpb25hbC5jcmVhdGUoZGVlcFBhcnRpYWxpZnkoc2NoZW1hLnVud3JhcCgpKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFpvZE51bGxhYmxlKSB7XG4gICAgICAgIHJldHVybiBab2ROdWxsYWJsZS5jcmVhdGUoZGVlcFBhcnRpYWxpZnkoc2NoZW1hLnVud3JhcCgpKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFpvZFR1cGxlKSB7XG4gICAgICAgIHJldHVybiBab2RUdXBsZS5jcmVhdGUoc2NoZW1hLml0ZW1zLm1hcCgoaXRlbSkgPT4gZGVlcFBhcnRpYWxpZnkoaXRlbSkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFpvZE9iamVjdCBleHRlbmRzIFpvZFR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLl9jYWNoZWQgPSBudWxsO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGRlcHJlY2F0ZWQgSW4gbW9zdCBjYXNlcywgdGhpcyBpcyBubyBsb25nZXIgbmVlZGVkIC0gdW5rbm93biBwcm9wZXJ0aWVzIGFyZSBub3cgc2lsZW50bHkgc3RyaXBwZWQuXG4gICAgICAgICAqIElmIHlvdSB3YW50IHRvIHBhc3MgdGhyb3VnaCB1bmtub3duIHByb3BlcnRpZXMsIHVzZSBgLnBhc3N0aHJvdWdoKClgIGluc3RlYWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm5vbnN0cmljdCA9IHRoaXMucGFzc3Rocm91Z2g7XG4gICAgICAgIC8vIGV4dGVuZDxcbiAgICAgICAgLy8gICBBdWdtZW50YXRpb24gZXh0ZW5kcyBab2RSYXdTaGFwZSxcbiAgICAgICAgLy8gICBOZXdPdXRwdXQgZXh0ZW5kcyB1dGlsLmZsYXR0ZW48e1xuICAgICAgICAvLyAgICAgW2sgaW4ga2V5b2YgQXVnbWVudGF0aW9uIHwga2V5b2YgT3V0cHV0XTogayBleHRlbmRzIGtleW9mIEF1Z21lbnRhdGlvblxuICAgICAgICAvLyAgICAgICA/IEF1Z21lbnRhdGlvbltrXVtcIl9vdXRwdXRcIl1cbiAgICAgICAgLy8gICAgICAgOiBrIGV4dGVuZHMga2V5b2YgT3V0cHV0XG4gICAgICAgIC8vICAgICAgID8gT3V0cHV0W2tdXG4gICAgICAgIC8vICAgICAgIDogbmV2ZXI7XG4gICAgICAgIC8vICAgfT4sXG4gICAgICAgIC8vICAgTmV3SW5wdXQgZXh0ZW5kcyB1dGlsLmZsYXR0ZW48e1xuICAgICAgICAvLyAgICAgW2sgaW4ga2V5b2YgQXVnbWVudGF0aW9uIHwga2V5b2YgSW5wdXRdOiBrIGV4dGVuZHMga2V5b2YgQXVnbWVudGF0aW9uXG4gICAgICAgIC8vICAgICAgID8gQXVnbWVudGF0aW9uW2tdW1wiX2lucHV0XCJdXG4gICAgICAgIC8vICAgICAgIDogayBleHRlbmRzIGtleW9mIElucHV0XG4gICAgICAgIC8vICAgICAgID8gSW5wdXRba11cbiAgICAgICAgLy8gICAgICAgOiBuZXZlcjtcbiAgICAgICAgLy8gICB9PlxuICAgICAgICAvLyA+KFxuICAgICAgICAvLyAgIGF1Z21lbnRhdGlvbjogQXVnbWVudGF0aW9uXG4gICAgICAgIC8vICk6IFpvZE9iamVjdDxcbiAgICAgICAgLy8gICBleHRlbmRTaGFwZTxULCBBdWdtZW50YXRpb24+LFxuICAgICAgICAvLyAgIFVua25vd25LZXlzLFxuICAgICAgICAvLyAgIENhdGNoYWxsLFxuICAgICAgICAvLyAgIE5ld091dHB1dCxcbiAgICAgICAgLy8gICBOZXdJbnB1dFxuICAgICAgICAvLyA+IHtcbiAgICAgICAgLy8gICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgIC8vICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgIC8vICAgICBzaGFwZTogKCkgPT4gKHtcbiAgICAgICAgLy8gICAgICAgLi4udGhpcy5fZGVmLnNoYXBlKCksXG4gICAgICAgIC8vICAgICAgIC4uLmF1Z21lbnRhdGlvbixcbiAgICAgICAgLy8gICAgIH0pLFxuICAgICAgICAvLyAgIH0pIGFzIGFueTtcbiAgICAgICAgLy8gfVxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlcHJlY2F0ZWQgVXNlIGAuZXh0ZW5kYCBpbnN0ZWFkXG4gICAgICAgICAqICAqL1xuICAgICAgICB0aGlzLmF1Z21lbnQgPSB0aGlzLmV4dGVuZDtcbiAgICB9XG4gICAgX2dldENhY2hlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NhY2hlZCAhPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZWQ7XG4gICAgICAgIGNvbnN0IHNoYXBlID0gdGhpcy5fZGVmLnNoYXBlKCk7XG4gICAgICAgIGNvbnN0IGtleXMgPSB1dGlsLm9iamVjdEtleXMoc2hhcGUpO1xuICAgICAgICB0aGlzLl9jYWNoZWQgPSB7IHNoYXBlLCBrZXlzIH07XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWNoZWQ7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLm9iamVjdCkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5vYmplY3QsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHN0YXR1cywgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCB7IHNoYXBlLCBrZXlzOiBzaGFwZUtleXMgfSA9IHRoaXMuX2dldENhY2hlZCgpO1xuICAgICAgICBjb25zdCBleHRyYUtleXMgPSBbXTtcbiAgICAgICAgaWYgKCEodGhpcy5fZGVmLmNhdGNoYWxsIGluc3RhbmNlb2YgWm9kTmV2ZXIgJiYgdGhpcy5fZGVmLnVua25vd25LZXlzID09PSBcInN0cmlwXCIpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBjdHguZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmICghc2hhcGVLZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFpcnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2Ygc2hhcGVLZXlzKSB7XG4gICAgICAgICAgICBjb25zdCBrZXlWYWxpZGF0b3IgPSBzaGFwZVtrZXldO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjdHguZGF0YVtrZXldO1xuICAgICAgICAgICAgcGFpcnMucHVzaCh7XG4gICAgICAgICAgICAgICAga2V5OiB7IHN0YXR1czogXCJ2YWxpZFwiLCB2YWx1ZToga2V5IH0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IGtleVZhbGlkYXRvci5fcGFyc2UobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIHZhbHVlLCBjdHgucGF0aCwga2V5KSksXG4gICAgICAgICAgICAgICAgYWx3YXlzU2V0OiBrZXkgaW4gY3R4LmRhdGEsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fZGVmLmNhdGNoYWxsIGluc3RhbmNlb2YgWm9kTmV2ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHVua25vd25LZXlzID0gdGhpcy5fZGVmLnVua25vd25LZXlzO1xuICAgICAgICAgICAgaWYgKHVua25vd25LZXlzID09PSBcInBhc3N0aHJvdWdoXCIpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBleHRyYUtleXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFpcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IHsgc3RhdHVzOiBcInZhbGlkXCIsIHZhbHVlOiBrZXkgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7IHN0YXR1czogXCJ2YWxpZFwiLCB2YWx1ZTogY3R4LmRhdGFba2V5XSB9LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1bmtub3duS2V5cyA9PT0gXCJzdHJpY3RcIikge1xuICAgICAgICAgICAgICAgIGlmIChleHRyYUtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS51bnJlY29nbml6ZWRfa2V5cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXM6IGV4dHJhS2V5cyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHVua25vd25LZXlzID09PSBcInN0cmlwXCIpIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW50ZXJuYWwgWm9kT2JqZWN0IGVycm9yOiBpbnZhbGlkIHVua25vd25LZXlzIHZhbHVlLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gcnVuIGNhdGNoYWxsIHZhbGlkYXRpb25cbiAgICAgICAgICAgIGNvbnN0IGNhdGNoYWxsID0gdGhpcy5fZGVmLmNhdGNoYWxsO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgZXh0cmFLZXlzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjdHguZGF0YVtrZXldO1xuICAgICAgICAgICAgICAgIHBhaXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBrZXk6IHsgc3RhdHVzOiBcInZhbGlkXCIsIHZhbHVlOiBrZXkgfSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNhdGNoYWxsLl9wYXJzZShuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwgdmFsdWUsIGN0eC5wYXRoLCBrZXkpIC8vLCBjdHguY2hpbGQoa2V5KSwgdmFsdWUsIGdldFBhcnNlZFR5cGUodmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGFsd2F5c1NldDoga2V5IGluIGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgICAgICAgICAudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3luY1BhaXJzID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYWlyIG9mIHBhaXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IHBhaXIua2V5O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHBhaXIudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHN5bmNQYWlycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWx3YXlzU2V0OiBwYWlyLmFsd2F5c1NldCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzeW5jUGFpcnM7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKChzeW5jUGFpcnMpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VPYmplY3RTeW5jKHN0YXR1cywgc3luY1BhaXJzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNlU3RhdHVzLm1lcmdlT2JqZWN0U3luYyhzdGF0dXMsIHBhaXJzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgc2hhcGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuc2hhcGUoKTtcbiAgICB9XG4gICAgc3RyaWN0KG1lc3NhZ2UpIHtcbiAgICAgICAgZXJyb3JVdGlsLmVyclRvT2JqO1xuICAgICAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICB1bmtub3duS2V5czogXCJzdHJpY3RcIixcbiAgICAgICAgICAgIC4uLihtZXNzYWdlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNYXA6IChpc3N1ZSwgY3R4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0RXJyb3IgPSB0aGlzLl9kZWYuZXJyb3JNYXA/Lihpc3N1ZSwgY3R4KS5tZXNzYWdlID8/IGN0eC5kZWZhdWx0RXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNzdWUuY29kZSA9PT0gXCJ1bnJlY29nbml6ZWRfa2V5c1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKS5tZXNzYWdlID8/IGRlZmF1bHRFcnJvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkZWZhdWx0RXJyb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHN0cmlwKCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICB1bmtub3duS2V5czogXCJzdHJpcFwiLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcGFzc3Rocm91Z2goKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHVua25vd25LZXlzOiBcInBhc3N0aHJvdWdoXCIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBjb25zdCBBdWdtZW50RmFjdG9yeSA9XG4gICAgLy8gICA8RGVmIGV4dGVuZHMgWm9kT2JqZWN0RGVmPihkZWY6IERlZikgPT5cbiAgICAvLyAgIDxBdWdtZW50YXRpb24gZXh0ZW5kcyBab2RSYXdTaGFwZT4oXG4gICAgLy8gICAgIGF1Z21lbnRhdGlvbjogQXVnbWVudGF0aW9uXG4gICAgLy8gICApOiBab2RPYmplY3Q8XG4gICAgLy8gICAgIGV4dGVuZFNoYXBlPFJldHVyblR5cGU8RGVmW1wic2hhcGVcIl0+LCBBdWdtZW50YXRpb24+LFxuICAgIC8vICAgICBEZWZbXCJ1bmtub3duS2V5c1wiXSxcbiAgICAvLyAgICAgRGVmW1wiY2F0Y2hhbGxcIl1cbiAgICAvLyAgID4gPT4ge1xuICAgIC8vICAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgLy8gICAgICAgLi4uZGVmLFxuICAgIC8vICAgICAgIHNoYXBlOiAoKSA9PiAoe1xuICAgIC8vICAgICAgICAgLi4uZGVmLnNoYXBlKCksXG4gICAgLy8gICAgICAgICAuLi5hdWdtZW50YXRpb24sXG4gICAgLy8gICAgICAgfSksXG4gICAgLy8gICAgIH0pIGFzIGFueTtcbiAgICAvLyAgIH07XG4gICAgZXh0ZW5kKGF1Z21lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBzaGFwZTogKCkgPT4gKHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWYuc2hhcGUoKSxcbiAgICAgICAgICAgICAgICAuLi5hdWdtZW50YXRpb24sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByaW9yIHRvIHpvZEAxLjAuMTIgdGhlcmUgd2FzIGEgYnVnIGluIHRoZVxuICAgICAqIGluZmVycmVkIHR5cGUgb2YgbWVyZ2VkIG9iamVjdHMuIFBsZWFzZVxuICAgICAqIHVwZ3JhZGUgaWYgeW91IGFyZSBleHBlcmllbmNpbmcgaXNzdWVzLlxuICAgICAqL1xuICAgIG1lcmdlKG1lcmdpbmcpIHtcbiAgICAgICAgY29uc3QgbWVyZ2VkID0gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgICAgICB1bmtub3duS2V5czogbWVyZ2luZy5fZGVmLnVua25vd25LZXlzLFxuICAgICAgICAgICAgY2F0Y2hhbGw6IG1lcmdpbmcuX2RlZi5jYXRjaGFsbCxcbiAgICAgICAgICAgIHNoYXBlOiAoKSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2RlZi5zaGFwZSgpLFxuICAgICAgICAgICAgICAgIC4uLm1lcmdpbmcuX2RlZi5zaGFwZSgpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9iamVjdCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZXJnZWQ7XG4gICAgfVxuICAgIC8vIG1lcmdlPFxuICAgIC8vICAgSW5jb21pbmcgZXh0ZW5kcyBBbnlab2RPYmplY3QsXG4gICAgLy8gICBBdWdtZW50YXRpb24gZXh0ZW5kcyBJbmNvbWluZ1tcInNoYXBlXCJdLFxuICAgIC8vICAgTmV3T3V0cHV0IGV4dGVuZHMge1xuICAgIC8vICAgICBbayBpbiBrZXlvZiBBdWdtZW50YXRpb24gfCBrZXlvZiBPdXRwdXRdOiBrIGV4dGVuZHMga2V5b2YgQXVnbWVudGF0aW9uXG4gICAgLy8gICAgICAgPyBBdWdtZW50YXRpb25ba11bXCJfb3V0cHV0XCJdXG4gICAgLy8gICAgICAgOiBrIGV4dGVuZHMga2V5b2YgT3V0cHV0XG4gICAgLy8gICAgICAgPyBPdXRwdXRba11cbiAgICAvLyAgICAgICA6IG5ldmVyO1xuICAgIC8vICAgfSxcbiAgICAvLyAgIE5ld0lucHV0IGV4dGVuZHMge1xuICAgIC8vICAgICBbayBpbiBrZXlvZiBBdWdtZW50YXRpb24gfCBrZXlvZiBJbnB1dF06IGsgZXh0ZW5kcyBrZXlvZiBBdWdtZW50YXRpb25cbiAgICAvLyAgICAgICA/IEF1Z21lbnRhdGlvbltrXVtcIl9pbnB1dFwiXVxuICAgIC8vICAgICAgIDogayBleHRlbmRzIGtleW9mIElucHV0XG4gICAgLy8gICAgICAgPyBJbnB1dFtrXVxuICAgIC8vICAgICAgIDogbmV2ZXI7XG4gICAgLy8gICB9XG4gICAgLy8gPihcbiAgICAvLyAgIG1lcmdpbmc6IEluY29taW5nXG4gICAgLy8gKTogWm9kT2JqZWN0PFxuICAgIC8vICAgZXh0ZW5kU2hhcGU8VCwgUmV0dXJuVHlwZTxJbmNvbWluZ1tcIl9kZWZcIl1bXCJzaGFwZVwiXT4+LFxuICAgIC8vICAgSW5jb21pbmdbXCJfZGVmXCJdW1widW5rbm93bktleXNcIl0sXG4gICAgLy8gICBJbmNvbWluZ1tcIl9kZWZcIl1bXCJjYXRjaGFsbFwiXSxcbiAgICAvLyAgIE5ld091dHB1dCxcbiAgICAvLyAgIE5ld0lucHV0XG4gICAgLy8gPiB7XG4gICAgLy8gICBjb25zdCBtZXJnZWQ6IGFueSA9IG5ldyBab2RPYmplY3Qoe1xuICAgIC8vICAgICB1bmtub3duS2V5czogbWVyZ2luZy5fZGVmLnVua25vd25LZXlzLFxuICAgIC8vICAgICBjYXRjaGFsbDogbWVyZ2luZy5fZGVmLmNhdGNoYWxsLFxuICAgIC8vICAgICBzaGFwZTogKCkgPT5cbiAgICAvLyAgICAgICBvYmplY3RVdGlsLm1lcmdlU2hhcGVzKHRoaXMuX2RlZi5zaGFwZSgpLCBtZXJnaW5nLl9kZWYuc2hhcGUoKSksXG4gICAgLy8gICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT2JqZWN0LFxuICAgIC8vICAgfSkgYXMgYW55O1xuICAgIC8vICAgcmV0dXJuIG1lcmdlZDtcbiAgICAvLyB9XG4gICAgc2V0S2V5KGtleSwgc2NoZW1hKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmF1Z21lbnQoeyBba2V5XTogc2NoZW1hIH0pO1xuICAgIH1cbiAgICAvLyBtZXJnZTxJbmNvbWluZyBleHRlbmRzIEFueVpvZE9iamVjdD4oXG4gICAgLy8gICBtZXJnaW5nOiBJbmNvbWluZ1xuICAgIC8vICk6IC8vWm9kT2JqZWN0PFQgJiBJbmNvbWluZ1tcIl9zaGFwZVwiXSwgVW5rbm93bktleXMsIENhdGNoYWxsPiA9IChtZXJnaW5nKSA9PiB7XG4gICAgLy8gWm9kT2JqZWN0PFxuICAgIC8vICAgZXh0ZW5kU2hhcGU8VCwgUmV0dXJuVHlwZTxJbmNvbWluZ1tcIl9kZWZcIl1bXCJzaGFwZVwiXT4+LFxuICAgIC8vICAgSW5jb21pbmdbXCJfZGVmXCJdW1widW5rbm93bktleXNcIl0sXG4gICAgLy8gICBJbmNvbWluZ1tcIl9kZWZcIl1bXCJjYXRjaGFsbFwiXVxuICAgIC8vID4ge1xuICAgIC8vICAgLy8gY29uc3QgbWVyZ2VkU2hhcGUgPSBvYmplY3RVdGlsLm1lcmdlU2hhcGVzKFxuICAgIC8vICAgLy8gICB0aGlzLl9kZWYuc2hhcGUoKSxcbiAgICAvLyAgIC8vICAgbWVyZ2luZy5fZGVmLnNoYXBlKClcbiAgICAvLyAgIC8vICk7XG4gICAgLy8gICBjb25zdCBtZXJnZWQ6IGFueSA9IG5ldyBab2RPYmplY3Qoe1xuICAgIC8vICAgICB1bmtub3duS2V5czogbWVyZ2luZy5fZGVmLnVua25vd25LZXlzLFxuICAgIC8vICAgICBjYXRjaGFsbDogbWVyZ2luZy5fZGVmLmNhdGNoYWxsLFxuICAgIC8vICAgICBzaGFwZTogKCkgPT5cbiAgICAvLyAgICAgICBvYmplY3RVdGlsLm1lcmdlU2hhcGVzKHRoaXMuX2RlZi5zaGFwZSgpLCBtZXJnaW5nLl9kZWYuc2hhcGUoKSksXG4gICAgLy8gICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT2JqZWN0LFxuICAgIC8vICAgfSkgYXMgYW55O1xuICAgIC8vICAgcmV0dXJuIG1lcmdlZDtcbiAgICAvLyB9XG4gICAgY2F0Y2hhbGwoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2F0Y2hhbGw6IGluZGV4LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcGljayhtYXNrKSB7XG4gICAgICAgIGNvbnN0IHNoYXBlID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHV0aWwub2JqZWN0S2V5cyhtYXNrKSkge1xuICAgICAgICAgICAgaWYgKG1hc2tba2V5XSAmJiB0aGlzLnNoYXBlW2tleV0pIHtcbiAgICAgICAgICAgICAgICBzaGFwZVtrZXldID0gdGhpcy5zaGFwZVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHNoYXBlOiAoKSA9PiBzaGFwZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG9taXQobWFzaykge1xuICAgICAgICBjb25zdCBzaGFwZSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiB1dGlsLm9iamVjdEtleXModGhpcy5zaGFwZSkpIHtcbiAgICAgICAgICAgIGlmICghbWFza1trZXldKSB7XG4gICAgICAgICAgICAgICAgc2hhcGVba2V5XSA9IHRoaXMuc2hhcGVba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBzaGFwZTogKCkgPT4gc2hhcGUsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGRlZXBQYXJ0aWFsKCkge1xuICAgICAgICByZXR1cm4gZGVlcFBhcnRpYWxpZnkodGhpcyk7XG4gICAgfVxuICAgIHBhcnRpYWwobWFzaykge1xuICAgICAgICBjb25zdCBuZXdTaGFwZSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiB1dGlsLm9iamVjdEtleXModGhpcy5zaGFwZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkU2NoZW1hID0gdGhpcy5zaGFwZVtrZXldO1xuICAgICAgICAgICAgaWYgKG1hc2sgJiYgIW1hc2tba2V5XSkge1xuICAgICAgICAgICAgICAgIG5ld1NoYXBlW2tleV0gPSBmaWVsZFNjaGVtYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld1NoYXBlW2tleV0gPSBmaWVsZFNjaGVtYS5vcHRpb25hbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHNoYXBlOiAoKSA9PiBuZXdTaGFwZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlcXVpcmVkKG1hc2spIHtcbiAgICAgICAgY29uc3QgbmV3U2hhcGUgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgdXRpbC5vYmplY3RLZXlzKHRoaXMuc2hhcGUpKSB7XG4gICAgICAgICAgICBpZiAobWFzayAmJiAhbWFza1trZXldKSB7XG4gICAgICAgICAgICAgICAgbmV3U2hhcGVba2V5XSA9IHRoaXMuc2hhcGVba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkU2NoZW1hID0gdGhpcy5zaGFwZVtrZXldO1xuICAgICAgICAgICAgICAgIGxldCBuZXdGaWVsZCA9IGZpZWxkU2NoZW1hO1xuICAgICAgICAgICAgICAgIHdoaWxlIChuZXdGaWVsZCBpbnN0YW5jZW9mIFpvZE9wdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0ZpZWxkID0gbmV3RmllbGQuX2RlZi5pbm5lclR5cGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5ld1NoYXBlW2tleV0gPSBuZXdGaWVsZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBzaGFwZTogKCkgPT4gbmV3U2hhcGUsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBrZXlvZigpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVpvZEVudW0odXRpbC5vYmplY3RLZXlzKHRoaXMuc2hhcGUpKTtcbiAgICB9XG59XG5ab2RPYmplY3QuY3JlYXRlID0gKHNoYXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgIHNoYXBlOiAoKSA9PiBzaGFwZSxcbiAgICAgICAgdW5rbm93bktleXM6IFwic3RyaXBcIixcbiAgICAgICAgY2F0Y2hhbGw6IFpvZE5ldmVyLmNyZWF0ZSgpLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9iamVjdCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcblpvZE9iamVjdC5zdHJpY3RDcmVhdGUgPSAoc2hhcGUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgc2hhcGU6ICgpID0+IHNoYXBlLFxuICAgICAgICB1bmtub3duS2V5czogXCJzdHJpY3RcIixcbiAgICAgICAgY2F0Y2hhbGw6IFpvZE5ldmVyLmNyZWF0ZSgpLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9iamVjdCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcblpvZE9iamVjdC5sYXp5Y3JlYXRlID0gKHNoYXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgIHNoYXBlLFxuICAgICAgICB1bmtub3duS2V5czogXCJzdHJpcFwiLFxuICAgICAgICBjYXRjaGFsbDogWm9kTmV2ZXIuY3JlYXRlKCksXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT2JqZWN0LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZXhwb3J0IGNsYXNzIFpvZFVuaW9uIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fZGVmLm9wdGlvbnM7XG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZVJlc3VsdHMocmVzdWx0cykge1xuICAgICAgICAgICAgLy8gcmV0dXJuIGZpcnN0IGlzc3VlLWZyZWUgdmFsaWRhdGlvbiBpZiBpdCBleGlzdHNcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnJlc3VsdC5zdGF0dXMgPT09IFwidmFsaWRcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yZXN1bHQuc3RhdHVzID09PSBcImRpcnR5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGlzc3VlcyBmcm9tIGRpcnR5IG9wdGlvblxuICAgICAgICAgICAgICAgICAgICBjdHguY29tbW9uLmlzc3Vlcy5wdXNoKC4uLnJlc3VsdC5jdHguY29tbW9uLmlzc3Vlcyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQucmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHJldHVybiBpbnZhbGlkXG4gICAgICAgICAgICBjb25zdCB1bmlvbkVycm9ycyA9IHJlc3VsdHMubWFwKChyZXN1bHQpID0+IG5ldyBab2RFcnJvcihyZXN1bHQuY3R4LmNvbW1vbi5pc3N1ZXMpKTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3VuaW9uLFxuICAgICAgICAgICAgICAgIHVuaW9uRXJyb3JzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKG9wdGlvbnMubWFwKGFzeW5jIChvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEN0eCA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uY3R4LFxuICAgICAgICAgICAgICAgICAgICBjb21tb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN0eC5jb21tb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IGF3YWl0IG9wdGlvbi5fcGFyc2VBc3luYyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjaGlsZEN0eCxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGN0eDogY2hpbGRDdHgsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKS50aGVuKGhhbmRsZVJlc3VsdHMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IGRpcnR5ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgaXNzdWVzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRDdHggPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmN0eCxcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jdHguY29tbW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb3B0aW9uLl9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogY2hpbGRDdHgsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwidmFsaWRcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBcImRpcnR5XCIgJiYgIWRpcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgIGRpcnR5ID0geyByZXN1bHQsIGN0eDogY2hpbGRDdHggfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkQ3R4LmNvbW1vbi5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzc3Vlcy5wdXNoKGNoaWxkQ3R4LmNvbW1vbi5pc3N1ZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkaXJ0eSkge1xuICAgICAgICAgICAgICAgIGN0eC5jb21tb24uaXNzdWVzLnB1c2goLi4uZGlydHkuY3R4LmNvbW1vbi5pc3N1ZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkaXJ0eS5yZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB1bmlvbkVycm9ycyA9IGlzc3Vlcy5tYXAoKGlzc3VlcykgPT4gbmV3IFpvZEVycm9yKGlzc3VlcykpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdW5pb24sXG4gICAgICAgICAgICAgICAgdW5pb25FcnJvcnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBvcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLm9wdGlvbnM7XG4gICAgfVxufVxuWm9kVW5pb24uY3JlYXRlID0gKHR5cGVzLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFVuaW9uKHtcbiAgICAgICAgb3B0aW9uczogdHlwZXMsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kVW5pb24sXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vLy8vLy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vLy8vLy8vXG4vLy8vLy8vLy8vICAgICAgWm9kRGlzY3JpbWluYXRlZFVuaW9uICAgICAgLy8vLy8vLy8vL1xuLy8vLy8vLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8vLy8vLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuY29uc3QgZ2V0RGlzY3JpbWluYXRvciA9ICh0eXBlKSA9PiB7XG4gICAgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2RMYXp5KSB7XG4gICAgICAgIHJldHVybiBnZXREaXNjcmltaW5hdG9yKHR5cGUuc2NoZW1hKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZEVmZmVjdHMpIHtcbiAgICAgICAgcmV0dXJuIGdldERpc2NyaW1pbmF0b3IodHlwZS5pbm5lclR5cGUoKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2RMaXRlcmFsKSB7XG4gICAgICAgIHJldHVybiBbdHlwZS52YWx1ZV07XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2RFbnVtKSB7XG4gICAgICAgIHJldHVybiB0eXBlLm9wdGlvbnM7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2ROYXRpdmVFbnVtKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBiYW4vYmFuXG4gICAgICAgIHJldHVybiB1dGlsLm9iamVjdFZhbHVlcyh0eXBlLmVudW0pO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kRGVmYXVsdCkge1xuICAgICAgICByZXR1cm4gZ2V0RGlzY3JpbWluYXRvcih0eXBlLl9kZWYuaW5uZXJUeXBlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZFVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gW3VuZGVmaW5lZF07XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2ROdWxsKSB7XG4gICAgICAgIHJldHVybiBbbnVsbF07XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2RPcHRpb25hbCkge1xuICAgICAgICByZXR1cm4gW3VuZGVmaW5lZCwgLi4uZ2V0RGlzY3JpbWluYXRvcih0eXBlLnVud3JhcCgpKV07XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2ROdWxsYWJsZSkge1xuICAgICAgICByZXR1cm4gW251bGwsIC4uLmdldERpc2NyaW1pbmF0b3IodHlwZS51bndyYXAoKSldO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kQnJhbmRlZCkge1xuICAgICAgICByZXR1cm4gZ2V0RGlzY3JpbWluYXRvcih0eXBlLnVud3JhcCgpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZFJlYWRvbmx5KSB7XG4gICAgICAgIHJldHVybiBnZXREaXNjcmltaW5hdG9yKHR5cGUudW53cmFwKCkpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kQ2F0Y2gpIHtcbiAgICAgICAgcmV0dXJuIGdldERpc2NyaW1pbmF0b3IodHlwZS5fZGVmLmlubmVyVHlwZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxufTtcbmV4cG9ydCBjbGFzcyBab2REaXNjcmltaW5hdGVkVW5pb24gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5vYmplY3QpIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUub2JqZWN0LFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlzY3JpbWluYXRvciA9IHRoaXMuZGlzY3JpbWluYXRvcjtcbiAgICAgICAgY29uc3QgZGlzY3JpbWluYXRvclZhbHVlID0gY3R4LmRhdGFbZGlzY3JpbWluYXRvcl07XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMub3B0aW9uc01hcC5nZXQoZGlzY3JpbWluYXRvclZhbHVlKTtcbiAgICAgICAgaWYgKCFvcHRpb24pIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3VuaW9uX2Rpc2NyaW1pbmF0b3IsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogQXJyYXkuZnJvbSh0aGlzLm9wdGlvbnNNYXAua2V5cygpKSxcbiAgICAgICAgICAgICAgICBwYXRoOiBbZGlzY3JpbWluYXRvcl0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uLl9wYXJzZUFzeW5jKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi5fcGFyc2VTeW5jKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBkaXNjcmltaW5hdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmRpc2NyaW1pbmF0b3I7XG4gICAgfVxuICAgIGdldCBvcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLm9wdGlvbnM7XG4gICAgfVxuICAgIGdldCBvcHRpb25zTWFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLm9wdGlvbnNNYXA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgZGlzY3JpbWluYXRlZCB1bmlvbiBzY2hlbWEuIEl0cyBiZWhhdmlvdXIgaXMgdmVyeSBzaW1pbGFyIHRvIHRoYXQgb2YgdGhlIG5vcm1hbCB6LnVuaW9uKCkgY29uc3RydWN0b3IuXG4gICAgICogSG93ZXZlciwgaXQgb25seSBhbGxvd3MgYSB1bmlvbiBvZiBvYmplY3RzLCBhbGwgb2Ygd2hpY2ggbmVlZCB0byBzaGFyZSBhIGRpc2NyaW1pbmF0b3IgcHJvcGVydHkuIFRoaXMgcHJvcGVydHkgbXVzdFxuICAgICAqIGhhdmUgYSBkaWZmZXJlbnQgdmFsdWUgZm9yIGVhY2ggb2JqZWN0IGluIHRoZSB1bmlvbi5cbiAgICAgKiBAcGFyYW0gZGlzY3JpbWluYXRvciB0aGUgbmFtZSBvZiB0aGUgZGlzY3JpbWluYXRvciBwcm9wZXJ0eVxuICAgICAqIEBwYXJhbSB0eXBlcyBhbiBhcnJheSBvZiBvYmplY3Qgc2NoZW1hc1xuICAgICAqIEBwYXJhbSBwYXJhbXNcbiAgICAgKi9cbiAgICBzdGF0aWMgY3JlYXRlKGRpc2NyaW1pbmF0b3IsIG9wdGlvbnMsIHBhcmFtcykge1xuICAgICAgICAvLyBHZXQgYWxsIHRoZSB2YWxpZCBkaXNjcmltaW5hdG9yIHZhbHVlc1xuICAgICAgICBjb25zdCBvcHRpb25zTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICAvLyB0cnkge1xuICAgICAgICBmb3IgKGNvbnN0IHR5cGUgb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgZGlzY3JpbWluYXRvclZhbHVlcyA9IGdldERpc2NyaW1pbmF0b3IodHlwZS5zaGFwZVtkaXNjcmltaW5hdG9yXSk7XG4gICAgICAgICAgICBpZiAoIWRpc2NyaW1pbmF0b3JWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBIGRpc2NyaW1pbmF0b3IgdmFsdWUgZm9yIGtleSBcXGAke2Rpc2NyaW1pbmF0b3J9XFxgIGNvdWxkIG5vdCBiZSBleHRyYWN0ZWQgZnJvbSBhbGwgc2NoZW1hIG9wdGlvbnNgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgZGlzY3JpbWluYXRvclZhbHVlcykge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zTWFwLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXNjcmltaW5hdG9yIHByb3BlcnR5ICR7U3RyaW5nKGRpc2NyaW1pbmF0b3IpfSBoYXMgZHVwbGljYXRlIHZhbHVlICR7U3RyaW5nKHZhbHVlKX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3B0aW9uc01hcC5zZXQodmFsdWUsIHR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgWm9kRGlzY3JpbWluYXRlZFVuaW9uKHtcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRGlzY3JpbWluYXRlZFVuaW9uLFxuICAgICAgICAgICAgZGlzY3JpbWluYXRvcixcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBvcHRpb25zTWFwLFxuICAgICAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5mdW5jdGlvbiBtZXJnZVZhbHVlcyhhLCBiKSB7XG4gICAgY29uc3QgYVR5cGUgPSBnZXRQYXJzZWRUeXBlKGEpO1xuICAgIGNvbnN0IGJUeXBlID0gZ2V0UGFyc2VkVHlwZShiKTtcbiAgICBpZiAoYSA9PT0gYikge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgZGF0YTogYSB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChhVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS5vYmplY3QgJiYgYlR5cGUgPT09IFpvZFBhcnNlZFR5cGUub2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IGJLZXlzID0gdXRpbC5vYmplY3RLZXlzKGIpO1xuICAgICAgICBjb25zdCBzaGFyZWRLZXlzID0gdXRpbC5vYmplY3RLZXlzKGEpLmZpbHRlcigoa2V5KSA9PiBiS2V5cy5pbmRleE9mKGtleSkgIT09IC0xKTtcbiAgICAgICAgY29uc3QgbmV3T2JqID0geyAuLi5hLCAuLi5iIH07XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHNoYXJlZEtleXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNoYXJlZFZhbHVlID0gbWVyZ2VWYWx1ZXMoYVtrZXldLCBiW2tleV0pO1xuICAgICAgICAgICAgaWYgKCFzaGFyZWRWYWx1ZS52YWxpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3T2JqW2tleV0gPSBzaGFyZWRWYWx1ZS5kYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCBkYXRhOiBuZXdPYmogfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYVR5cGUgPT09IFpvZFBhcnNlZFR5cGUuYXJyYXkgJiYgYlR5cGUgPT09IFpvZFBhcnNlZFR5cGUuYXJyYXkpIHtcbiAgICAgICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3QXJyYXkgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGEubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtQSA9IGFbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgaXRlbUIgPSBiW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IHNoYXJlZFZhbHVlID0gbWVyZ2VWYWx1ZXMoaXRlbUEsIGl0ZW1CKTtcbiAgICAgICAgICAgIGlmICghc2hhcmVkVmFsdWUudmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5ld0FycmF5LnB1c2goc2hhcmVkVmFsdWUuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIGRhdGE6IG5ld0FycmF5IH07XG4gICAgfVxuICAgIGVsc2UgaWYgKGFUeXBlID09PSBab2RQYXJzZWRUeXBlLmRhdGUgJiYgYlR5cGUgPT09IFpvZFBhcnNlZFR5cGUuZGF0ZSAmJiArYSA9PT0gK2IpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIGRhdGE6IGEgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSB9O1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBab2RJbnRlcnNlY3Rpb24gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMsIGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgY29uc3QgaGFuZGxlUGFyc2VkID0gKHBhcnNlZExlZnQsIHBhcnNlZFJpZ2h0KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNBYm9ydGVkKHBhcnNlZExlZnQpIHx8IGlzQWJvcnRlZChwYXJzZWRSaWdodCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1lcmdlZCA9IG1lcmdlVmFsdWVzKHBhcnNlZExlZnQudmFsdWUsIHBhcnNlZFJpZ2h0LnZhbHVlKTtcbiAgICAgICAgICAgIGlmICghbWVyZ2VkLnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX2ludGVyc2VjdGlvbl90eXBlcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0RpcnR5KHBhcnNlZExlZnQpIHx8IGlzRGlydHkocGFyc2VkUmlnaHQpKSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IG1lcmdlZC5kYXRhIH07XG4gICAgICAgIH07XG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgICAgIHRoaXMuX2RlZi5sZWZ0Ll9wYXJzZUFzeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWYucmlnaHQuX3BhcnNlQXN5bmMoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSkudGhlbigoW2xlZnQsIHJpZ2h0XSkgPT4gaGFuZGxlUGFyc2VkKGxlZnQsIHJpZ2h0KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlUGFyc2VkKHRoaXMuX2RlZi5sZWZ0Ll9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgfSksIHRoaXMuX2RlZi5yaWdodC5fcGFyc2VTeW5jKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblpvZEludGVyc2VjdGlvbi5jcmVhdGUgPSAobGVmdCwgcmlnaHQsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kSW50ZXJzZWN0aW9uKHtcbiAgICAgICAgbGVmdDogbGVmdCxcbiAgICAgICAgcmlnaHQ6IHJpZ2h0LFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEludGVyc2VjdGlvbixcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbi8vIHR5cGUgWm9kVHVwbGVJdGVtcyA9IFtab2RUeXBlQW55LCAuLi5ab2RUeXBlQW55W11dO1xuZXhwb3J0IGNsYXNzIFpvZFR1cGxlIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzLCBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5hcnJheSkge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5hcnJheSxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdHguZGF0YS5sZW5ndGggPCB0aGlzLl9kZWYuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX3NtYWxsLFxuICAgICAgICAgICAgICAgIG1pbmltdW06IHRoaXMuX2RlZi5pdGVtcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3QgPSB0aGlzLl9kZWYucmVzdDtcbiAgICAgICAgaWYgKCFyZXN0ICYmIGN0eC5kYXRhLmxlbmd0aCA+IHRoaXMuX2RlZi5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fYmlnLFxuICAgICAgICAgICAgICAgIG1heGltdW06IHRoaXMuX2RlZi5pdGVtcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gWy4uLmN0eC5kYXRhXVxuICAgICAgICAgICAgLm1hcCgoaXRlbSwgaXRlbUluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLl9kZWYuaXRlbXNbaXRlbUluZGV4XSB8fCB0aGlzLl9kZWYucmVzdDtcbiAgICAgICAgICAgIGlmICghc2NoZW1hKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIHNjaGVtYS5fcGFyc2UobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIGl0ZW0sIGN0eC5wYXRoLCBpdGVtSW5kZXgpKTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHgpID0+ICEheCk7IC8vIGZpbHRlciBudWxsc1xuICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGl0ZW1zKS50aGVuKChyZXN1bHRzKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlU3RhdHVzLm1lcmdlQXJyYXkoc3RhdHVzLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNlU3RhdHVzLm1lcmdlQXJyYXkoc3RhdHVzLCBpdGVtcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGl0ZW1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLml0ZW1zO1xuICAgIH1cbiAgICByZXN0KHJlc3QpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RUdXBsZSh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICByZXN0LFxuICAgICAgICB9KTtcbiAgICB9XG59XG5ab2RUdXBsZS5jcmVhdGUgPSAoc2NoZW1hcywgcGFyYW1zKSA9PiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNjaGVtYXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIllvdSBtdXN0IHBhc3MgYW4gYXJyYXkgb2Ygc2NoZW1hcyB0byB6LnR1cGxlKFsgLi4uIF0pXCIpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFpvZFR1cGxlKHtcbiAgICAgICAgaXRlbXM6IHNjaGVtYXMsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kVHVwbGUsXG4gICAgICAgIHJlc3Q6IG51bGwsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kUmVjb3JkIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgZ2V0IGtleVNjaGVtYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5rZXlUeXBlO1xuICAgIH1cbiAgICBnZXQgdmFsdWVTY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudmFsdWVUeXBlO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMsIGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLm9iamVjdCkge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5vYmplY3QsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYWlycyA9IFtdO1xuICAgICAgICBjb25zdCBrZXlUeXBlID0gdGhpcy5fZGVmLmtleVR5cGU7XG4gICAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuX2RlZi52YWx1ZVR5cGU7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGN0eC5kYXRhKSB7XG4gICAgICAgICAgICBwYWlycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBrZXk6IGtleVR5cGUuX3BhcnNlKG5ldyBQYXJzZUlucHV0TGF6eVBhdGgoY3R4LCBrZXksIGN0eC5wYXRoLCBrZXkpKSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVUeXBlLl9wYXJzZShuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwgY3R4LmRhdGFba2V5XSwgY3R4LnBhdGgsIGtleSkpLFxuICAgICAgICAgICAgICAgIGFsd2F5c1NldDoga2V5IGluIGN0eC5kYXRhLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXJzZVN0YXR1cy5tZXJnZU9iamVjdEFzeW5jKHN0YXR1cywgcGFpcnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNlU3RhdHVzLm1lcmdlT2JqZWN0U3luYyhzdGF0dXMsIHBhaXJzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgZWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi52YWx1ZVR5cGU7XG4gICAgfVxuICAgIHN0YXRpYyBjcmVhdGUoZmlyc3QsIHNlY29uZCwgdGhpcmQpIHtcbiAgICAgICAgaWYgKHNlY29uZCBpbnN0YW5jZW9mIFpvZFR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgWm9kUmVjb3JkKHtcbiAgICAgICAgICAgICAgICBrZXlUeXBlOiBmaXJzdCxcbiAgICAgICAgICAgICAgICB2YWx1ZVR5cGU6IHNlY29uZCxcbiAgICAgICAgICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFJlY29yZCxcbiAgICAgICAgICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHRoaXJkKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgWm9kUmVjb3JkKHtcbiAgICAgICAgICAgIGtleVR5cGU6IFpvZFN0cmluZy5jcmVhdGUoKSxcbiAgICAgICAgICAgIHZhbHVlVHlwZTogZmlyc3QsXG4gICAgICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFJlY29yZCxcbiAgICAgICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMoc2Vjb25kKSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFpvZE1hcCBleHRlbmRzIFpvZFR5cGUge1xuICAgIGdldCBrZXlTY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYua2V5VHlwZTtcbiAgICB9XG4gICAgZ2V0IHZhbHVlU2NoZW1hKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnZhbHVlVHlwZTtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzLCBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5tYXApIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUubWFwLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5VHlwZSA9IHRoaXMuX2RlZi5rZXlUeXBlO1xuICAgICAgICBjb25zdCB2YWx1ZVR5cGUgPSB0aGlzLl9kZWYudmFsdWVUeXBlO1xuICAgICAgICBjb25zdCBwYWlycyA9IFsuLi5jdHguZGF0YS5lbnRyaWVzKCldLm1hcCgoW2tleSwgdmFsdWVdLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBrZXk6IGtleVR5cGUuX3BhcnNlKG5ldyBQYXJzZUlucHV0TGF6eVBhdGgoY3R4LCBrZXksIGN0eC5wYXRoLCBbaW5kZXgsIFwia2V5XCJdKSksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlVHlwZS5fcGFyc2UobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIHZhbHVlLCBjdHgucGF0aCwgW2luZGV4LCBcInZhbHVlXCJdKSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbmFsTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGFpciBvZiBwYWlycykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBwYWlyLmtleTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCBwYWlyLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIgfHwgdmFsdWUuc3RhdHVzID09PSBcImFib3J0ZWRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5zdGF0dXMgPT09IFwiZGlydHlcIiB8fCB2YWx1ZS5zdGF0dXMgPT09IFwiZGlydHlcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxNYXAuc2V0KGtleS52YWx1ZSwgdmFsdWUudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IGZpbmFsTWFwIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbmFsTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYWlyIG9mIHBhaXJzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gcGFpci5rZXk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwYWlyLnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChrZXkuc3RhdHVzID09PSBcImFib3J0ZWRcIiB8fCB2YWx1ZS5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoa2V5LnN0YXR1cyA9PT0gXCJkaXJ0eVwiIHx8IHZhbHVlLnN0YXR1cyA9PT0gXCJkaXJ0eVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbE1hcC5zZXQoa2V5LnZhbHVlLCB2YWx1ZS52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IGZpbmFsTWFwIH07XG4gICAgICAgIH1cbiAgICB9XG59XG5ab2RNYXAuY3JlYXRlID0gKGtleVR5cGUsIHZhbHVlVHlwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RNYXAoe1xuICAgICAgICB2YWx1ZVR5cGUsXG4gICAgICAgIGtleVR5cGUsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTWFwLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZXhwb3J0IGNsYXNzIFpvZFNldCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IHN0YXR1cywgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBpZiAoY3R4LnBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUuc2V0KSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLnNldCxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlZiA9IHRoaXMuX2RlZjtcbiAgICAgICAgaWYgKGRlZi5taW5TaXplICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoY3R4LmRhdGEuc2l6ZSA8IGRlZi5taW5TaXplLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbmltdW06IGRlZi5taW5TaXplLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInNldFwiLFxuICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZGVmLm1pblNpemUubWVzc2FnZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVmLm1heFNpemUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChjdHguZGF0YS5zaXplID4gZGVmLm1heFNpemUudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgICAgIG1heGltdW06IGRlZi5tYXhTaXplLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInNldFwiLFxuICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZGVmLm1heFNpemUubWVzc2FnZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZVR5cGUgPSB0aGlzLl9kZWYudmFsdWVUeXBlO1xuICAgICAgICBmdW5jdGlvbiBmaW5hbGl6ZVNldChlbGVtZW50cykge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkU2V0ID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuc3RhdHVzID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIHBhcnNlZFNldC5hZGQoZWxlbWVudC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IHBhcnNlZFNldCB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gWy4uLmN0eC5kYXRhLnZhbHVlcygpXS5tYXAoKGl0ZW0sIGkpID0+IHZhbHVlVHlwZS5fcGFyc2UobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIGl0ZW0sIGN0eC5wYXRoLCBpKSkpO1xuICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGVsZW1lbnRzKS50aGVuKChlbGVtZW50cykgPT4gZmluYWxpemVTZXQoZWxlbWVudHMpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmaW5hbGl6ZVNldChlbGVtZW50cyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbWluKG1pblNpemUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RTZXQoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgbWluU2l6ZTogeyB2YWx1ZTogbWluU2l6ZSwgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtYXgobWF4U2l6ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFNldCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBtYXhTaXplOiB7IHZhbHVlOiBtYXhTaXplLCBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNpemUoc2l6ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5taW4oc2l6ZSwgbWVzc2FnZSkubWF4KHNpemUsIG1lc3NhZ2UpO1xuICAgIH1cbiAgICBub25lbXB0eShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbigxLCBtZXNzYWdlKTtcbiAgICB9XG59XG5ab2RTZXQuY3JlYXRlID0gKHZhbHVlVHlwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RTZXQoe1xuICAgICAgICB2YWx1ZVR5cGUsXG4gICAgICAgIG1pblNpemU6IG51bGwsXG4gICAgICAgIG1heFNpemU6IG51bGwsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kU2V0LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZXhwb3J0IGNsYXNzIFpvZEZ1bmN0aW9uIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudmFsaWRhdGUgPSB0aGlzLmltcGxlbWVudDtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBpZiAoY3R4LnBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUuZnVuY3Rpb24pIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUuZnVuY3Rpb24sXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBtYWtlQXJnc0lzc3VlKGFyZ3MsIGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gbWFrZUlzc3VlKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBhcmdzLFxuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIGVycm9yTWFwczogW2N0eC5jb21tb24uY29udGV4dHVhbEVycm9yTWFwLCBjdHguc2NoZW1hRXJyb3JNYXAsIGdldEVycm9yTWFwKCksIGRlZmF1bHRFcnJvck1hcF0uZmlsdGVyKCh4KSA9PiAhIXgpLFxuICAgICAgICAgICAgICAgIGlzc3VlRGF0YToge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9hcmd1bWVudHMsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c0Vycm9yOiBlcnJvcixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbWFrZVJldHVybnNJc3N1ZShyZXR1cm5zLCBlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIG1ha2VJc3N1ZSh7XG4gICAgICAgICAgICAgICAgZGF0YTogcmV0dXJucyxcbiAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICBlcnJvck1hcHM6IFtjdHguY29tbW9uLmNvbnRleHR1YWxFcnJvck1hcCwgY3R4LnNjaGVtYUVycm9yTWFwLCBnZXRFcnJvck1hcCgpLCBkZWZhdWx0RXJyb3JNYXBdLmZpbHRlcigoeCkgPT4gISF4KSxcbiAgICAgICAgICAgICAgICBpc3N1ZURhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfcmV0dXJuX3R5cGUsXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGVFcnJvcjogZXJyb3IsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgZXJyb3JNYXA6IGN0eC5jb21tb24uY29udGV4dHVhbEVycm9yTWFwIH07XG4gICAgICAgIGNvbnN0IGZuID0gY3R4LmRhdGE7XG4gICAgICAgIGlmICh0aGlzLl9kZWYucmV0dXJucyBpbnN0YW5jZW9mIFpvZFByb21pc2UpIHtcbiAgICAgICAgICAgIC8vIFdvdWxkIGxvdmUgYSB3YXkgdG8gYXZvaWQgZGlzYWJsaW5nIHRoaXMgcnVsZSwgYnV0IHdlIG5lZWRcbiAgICAgICAgICAgIC8vIGFuIGFsaWFzICh1c2luZyBhbiBhcnJvdyBmdW5jdGlvbiB3YXMgd2hhdCBjYXVzZWQgMjY1MSkuXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICAgICAgICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiBPSyhhc3luYyBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IFpvZEVycm9yKFtdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRBcmdzID0gYXdhaXQgbWUuX2RlZi5hcmdzLnBhcnNlQXN5bmMoYXJncywgcGFyYW1zKS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlcnJvci5hZGRJc3N1ZShtYWtlQXJnc0lzc3VlKGFyZ3MsIGUpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUmVmbGVjdC5hcHBseShmbiwgdGhpcywgcGFyc2VkQXJncyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkUmV0dXJucyA9IGF3YWl0IG1lLl9kZWYucmV0dXJucy5fZGVmLnR5cGVcbiAgICAgICAgICAgICAgICAgICAgLnBhcnNlQXN5bmMocmVzdWx0LCBwYXJhbXMpXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlcnJvci5hZGRJc3N1ZShtYWtlUmV0dXJuc0lzc3VlKHJlc3VsdCwgZSkpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkUmV0dXJucztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gV291bGQgbG92ZSBhIHdheSB0byBhdm9pZCBkaXNhYmxpbmcgdGhpcyBydWxlLCBidXQgd2UgbmVlZFxuICAgICAgICAgICAgLy8gYW4gYWxpYXMgKHVzaW5nIGFuIGFycm93IGZ1bmN0aW9uIHdhcyB3aGF0IGNhdXNlZCAyNjUxKS5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgICAgICAgICAgY29uc3QgbWUgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIE9LKGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkQXJncyA9IG1lLl9kZWYuYXJncy5zYWZlUGFyc2UoYXJncywgcGFyYW1zKTtcbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZEFyZ3Muc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWm9kRXJyb3IoW21ha2VBcmdzSXNzdWUoYXJncywgcGFyc2VkQXJncy5lcnJvcildKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gUmVmbGVjdC5hcHBseShmbiwgdGhpcywgcGFyc2VkQXJncy5kYXRhKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRSZXR1cm5zID0gbWUuX2RlZi5yZXR1cm5zLnNhZmVQYXJzZShyZXN1bHQsIHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJzZWRSZXR1cm5zLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFpvZEVycm9yKFttYWtlUmV0dXJuc0lzc3VlKHJlc3VsdCwgcGFyc2VkUmV0dXJucy5lcnJvcildKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZFJldHVybnMuZGF0YTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHBhcmFtZXRlcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuYXJncztcbiAgICB9XG4gICAgcmV0dXJuVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5yZXR1cm5zO1xuICAgIH1cbiAgICBhcmdzKC4uLml0ZW1zKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kRnVuY3Rpb24oe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgYXJnczogWm9kVHVwbGUuY3JlYXRlKGl0ZW1zKS5yZXN0KFpvZFVua25vd24uY3JlYXRlKCkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJucyhyZXR1cm5UeXBlKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kRnVuY3Rpb24oe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgcmV0dXJuczogcmV0dXJuVHlwZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGltcGxlbWVudChmdW5jKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZEZ1bmMgPSB0aGlzLnBhcnNlKGZ1bmMpO1xuICAgICAgICByZXR1cm4gdmFsaWRhdGVkRnVuYztcbiAgICB9XG4gICAgc3RyaWN0SW1wbGVtZW50KGZ1bmMpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkRnVuYyA9IHRoaXMucGFyc2UoZnVuYyk7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZWRGdW5jO1xuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlKGFyZ3MsIHJldHVybnMsIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEZ1bmN0aW9uKHtcbiAgICAgICAgICAgIGFyZ3M6IChhcmdzID8gYXJncyA6IFpvZFR1cGxlLmNyZWF0ZShbXSkucmVzdChab2RVbmtub3duLmNyZWF0ZSgpKSksXG4gICAgICAgICAgICByZXR1cm5zOiByZXR1cm5zIHx8IFpvZFVua25vd24uY3JlYXRlKCksXG4gICAgICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEZ1bmN0aW9uLFxuICAgICAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgWm9kTGF6eSBleHRlbmRzIFpvZFR5cGUge1xuICAgIGdldCBzY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuZ2V0dGVyKCk7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgY29uc3QgbGF6eVNjaGVtYSA9IHRoaXMuX2RlZi5nZXR0ZXIoKTtcbiAgICAgICAgcmV0dXJuIGxhenlTY2hlbWEuX3BhcnNlKHsgZGF0YTogY3R4LmRhdGEsIHBhdGg6IGN0eC5wYXRoLCBwYXJlbnQ6IGN0eCB9KTtcbiAgICB9XG59XG5ab2RMYXp5LmNyZWF0ZSA9IChnZXR0ZXIsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTGF6eSh7XG4gICAgICAgIGdldHRlcjogZ2V0dGVyLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZExhenksXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kTGl0ZXJhbCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBpZiAoaW5wdXQuZGF0YSAhPT0gdGhpcy5fZGVmLnZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfbGl0ZXJhbCxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogdGhpcy5fZGVmLnZhbHVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzdGF0dXM6IFwidmFsaWRcIiwgdmFsdWU6IGlucHV0LmRhdGEgfTtcbiAgICB9XG4gICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnZhbHVlO1xuICAgIH1cbn1cblpvZExpdGVyYWwuY3JlYXRlID0gKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZExpdGVyYWwoe1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTGl0ZXJhbCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmZ1bmN0aW9uIGNyZWF0ZVpvZEVudW0odmFsdWVzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFpvZEVudW0oe1xuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRW51bSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuZXhwb3J0IGNsYXNzIFpvZEVudW0gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dC5kYXRhICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBjb25zdCBleHBlY3RlZFZhbHVlcyA9IHRoaXMuX2RlZi52YWx1ZXM7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogdXRpbC5qb2luVmFsdWVzKGV4cGVjdGVkVmFsdWVzKSxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9jYWNoZSkge1xuICAgICAgICAgICAgdGhpcy5fY2FjaGUgPSBuZXcgU2V0KHRoaXMuX2RlZi52YWx1ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fY2FjaGUuaGFzKGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBjb25zdCBleHBlY3RlZFZhbHVlcyA9IHRoaXMuX2RlZi52YWx1ZXM7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfZW51bV92YWx1ZSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBleHBlY3RlZFZhbHVlcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9LKGlucHV0LmRhdGEpO1xuICAgIH1cbiAgICBnZXQgb3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi52YWx1ZXM7XG4gICAgfVxuICAgIGdldCBlbnVtKCkge1xuICAgICAgICBjb25zdCBlbnVtVmFsdWVzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgdmFsIG9mIHRoaXMuX2RlZi52YWx1ZXMpIHtcbiAgICAgICAgICAgIGVudW1WYWx1ZXNbdmFsXSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW51bVZhbHVlcztcbiAgICB9XG4gICAgZ2V0IFZhbHVlcygpIHtcbiAgICAgICAgY29uc3QgZW51bVZhbHVlcyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiB0aGlzLl9kZWYudmFsdWVzKSB7XG4gICAgICAgICAgICBlbnVtVmFsdWVzW3ZhbF0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudW1WYWx1ZXM7XG4gICAgfVxuICAgIGdldCBFbnVtKCkge1xuICAgICAgICBjb25zdCBlbnVtVmFsdWVzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgdmFsIG9mIHRoaXMuX2RlZi52YWx1ZXMpIHtcbiAgICAgICAgICAgIGVudW1WYWx1ZXNbdmFsXSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW51bVZhbHVlcztcbiAgICB9XG4gICAgZXh0cmFjdCh2YWx1ZXMsIG5ld0RlZiA9IHRoaXMuX2RlZikge1xuICAgICAgICByZXR1cm4gWm9kRW51bS5jcmVhdGUodmFsdWVzLCB7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICAuLi5uZXdEZWYsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBleGNsdWRlKHZhbHVlcywgbmV3RGVmID0gdGhpcy5fZGVmKSB7XG4gICAgICAgIHJldHVybiBab2RFbnVtLmNyZWF0ZSh0aGlzLm9wdGlvbnMuZmlsdGVyKChvcHQpID0+ICF2YWx1ZXMuaW5jbHVkZXMob3B0KSksIHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIC4uLm5ld0RlZixcbiAgICAgICAgfSk7XG4gICAgfVxufVxuWm9kRW51bS5jcmVhdGUgPSBjcmVhdGVab2RFbnVtO1xuZXhwb3J0IGNsYXNzIFpvZE5hdGl2ZUVudW0gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgbmF0aXZlRW51bVZhbHVlcyA9IHV0aWwuZ2V0VmFsaWRFbnVtVmFsdWVzKHRoaXMuX2RlZi52YWx1ZXMpO1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5zdHJpbmcgJiYgY3R4LnBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUubnVtYmVyKSB7XG4gICAgICAgICAgICBjb25zdCBleHBlY3RlZFZhbHVlcyA9IHV0aWwub2JqZWN0VmFsdWVzKG5hdGl2ZUVudW1WYWx1ZXMpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IHV0aWwuam9pblZhbHVlcyhleHBlY3RlZFZhbHVlcyksXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fY2FjaGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhY2hlID0gbmV3IFNldCh1dGlsLmdldFZhbGlkRW51bVZhbHVlcyh0aGlzLl9kZWYudmFsdWVzKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9jYWNoZS5oYXMoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkVmFsdWVzID0gdXRpbC5vYmplY3RWYWx1ZXMobmF0aXZlRW51bVZhbHVlcyk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfZW51bV92YWx1ZSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBleHBlY3RlZFZhbHVlcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9LKGlucHV0LmRhdGEpO1xuICAgIH1cbiAgICBnZXQgZW51bSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi52YWx1ZXM7XG4gICAgfVxufVxuWm9kTmF0aXZlRW51bS5jcmVhdGUgPSAodmFsdWVzLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE5hdGl2ZUVudW0oe1xuICAgICAgICB2YWx1ZXM6IHZhbHVlcyxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2ROYXRpdmVFbnVtLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZXhwb3J0IGNsYXNzIFpvZFByb21pc2UgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICB1bndyYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudHlwZTtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBpZiAoY3R4LnBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUucHJvbWlzZSAmJiBjdHguY29tbW9uLmFzeW5jID09PSBmYWxzZSkge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5wcm9taXNlLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvbWlzaWZpZWQgPSBjdHgucGFyc2VkVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS5wcm9taXNlID8gY3R4LmRhdGEgOiBQcm9taXNlLnJlc29sdmUoY3R4LmRhdGEpO1xuICAgICAgICByZXR1cm4gT0socHJvbWlzaWZpZWQudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi50eXBlLnBhcnNlQXN5bmMoZGF0YSwge1xuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIGVycm9yTWFwOiBjdHguY29tbW9uLmNvbnRleHR1YWxFcnJvck1hcCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KSk7XG4gICAgfVxufVxuWm9kUHJvbWlzZS5jcmVhdGUgPSAoc2NoZW1hLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFByb21pc2Uoe1xuICAgICAgICB0eXBlOiBzY2hlbWEsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kUHJvbWlzZSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmV4cG9ydCBjbGFzcyBab2RFZmZlY3RzIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgaW5uZXJUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnNjaGVtYTtcbiAgICB9XG4gICAgc291cmNlVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5zY2hlbWEuX2RlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVmZmVjdHNcbiAgICAgICAgICAgID8gdGhpcy5fZGVmLnNjaGVtYS5zb3VyY2VUeXBlKClcbiAgICAgICAgICAgIDogdGhpcy5fZGVmLnNjaGVtYTtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzLCBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGNvbnN0IGVmZmVjdCA9IHRoaXMuX2RlZi5lZmZlY3QgfHwgbnVsbDtcbiAgICAgICAgY29uc3QgY2hlY2tDdHggPSB7XG4gICAgICAgICAgICBhZGRJc3N1ZTogKGFyZykgPT4ge1xuICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwgYXJnKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJnLmZhdGFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5hYm9ydCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCBwYXRoKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdHgucGF0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGNoZWNrQ3R4LmFkZElzc3VlID0gY2hlY2tDdHguYWRkSXNzdWUuYmluZChjaGVja0N0eCk7XG4gICAgICAgIGlmIChlZmZlY3QudHlwZSA9PT0gXCJwcmVwcm9jZXNzXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZCA9IGVmZmVjdC50cmFuc2Zvcm0oY3R4LmRhdGEsIGNoZWNrQ3R4KTtcbiAgICAgICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwcm9jZXNzZWQpLnRoZW4oYXN5bmMgKHByb2Nlc3NlZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLnZhbHVlID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9kZWYuc2NoZW1hLl9wYXJzZUFzeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHByb2Nlc3NlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBESVJUWShyZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLnZhbHVlID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRElSVFkocmVzdWx0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMudmFsdWUgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9kZWYuc2NoZW1hLl9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBwcm9jZXNzZWQsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBESVJUWShyZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMudmFsdWUgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERJUlRZKHJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZWZmZWN0LnR5cGUgPT09IFwicmVmaW5lbWVudFwiKSB7XG4gICAgICAgICAgICBjb25zdCBleGVjdXRlUmVmaW5lbWVudCA9IChhY2MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBlZmZlY3QucmVmaW5lbWVudChhY2MsIGNoZWNrQ3R4KTtcbiAgICAgICAgICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFzeW5jIHJlZmluZW1lbnQgZW5jb3VudGVyZWQgZHVyaW5nIHN5bmNocm9ub3VzIHBhcnNlIG9wZXJhdGlvbi4gVXNlIC5wYXJzZUFzeW5jIGluc3RlYWQuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlubmVyID0gdGhpcy5fZGVmLnNjaGVtYS5fcGFyc2VTeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoaW5uZXIuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgaWYgKGlubmVyLnN0YXR1cyA9PT0gXCJkaXJ0eVwiKVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICAvLyByZXR1cm4gdmFsdWUgaXMgaWdub3JlZFxuICAgICAgICAgICAgICAgIGV4ZWN1dGVSZWZpbmVtZW50KGlubmVyLnZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IGlubmVyLnZhbHVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnNjaGVtYS5fcGFyc2VBc3luYyh7IGRhdGE6IGN0eC5kYXRhLCBwYXRoOiBjdHgucGF0aCwgcGFyZW50OiBjdHggfSkudGhlbigoaW5uZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlubmVyLnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlubmVyLnN0YXR1cyA9PT0gXCJkaXJ0eVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBleGVjdXRlUmVmaW5lbWVudChpbm5lci52YWx1ZSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IGlubmVyLnZhbHVlIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlZmZlY3QudHlwZSA9PT0gXCJ0cmFuc2Zvcm1cIikge1xuICAgICAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IHRoaXMuX2RlZi5zY2hlbWEuX3BhcnNlU3luYyh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKGJhc2UpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBlZmZlY3QudHJhbnNmb3JtKGJhc2UudmFsdWUsIGNoZWNrQ3R4KTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFzeW5jaHJvbm91cyB0cmFuc2Zvcm0gZW5jb3VudGVyZWQgZHVyaW5nIHN5bmNocm9ub3VzIHBhcnNlIG9wZXJhdGlvbi4gVXNlIC5wYXJzZUFzeW5jIGluc3RlYWQuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogcmVzdWx0IH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnNjaGVtYS5fcGFyc2VBc3luYyh7IGRhdGE6IGN0eC5kYXRhLCBwYXRoOiBjdHgucGF0aCwgcGFyZW50OiBjdHggfSkudGhlbigoYmFzZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQoYmFzZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShlZmZlY3QudHJhbnNmb3JtKGJhc2UudmFsdWUsIGNoZWNrQ3R4KSkudGhlbigocmVzdWx0KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdXRpbC5hc3NlcnROZXZlcihlZmZlY3QpO1xuICAgIH1cbn1cblpvZEVmZmVjdHMuY3JlYXRlID0gKHNjaGVtYSwgZWZmZWN0LCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZEVmZmVjdHMoe1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRWZmZWN0cyxcbiAgICAgICAgZWZmZWN0LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuWm9kRWZmZWN0cy5jcmVhdGVXaXRoUHJlcHJvY2VzcyA9IChwcmVwcm9jZXNzLCBzY2hlbWEsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kRWZmZWN0cyh7XG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgZWZmZWN0OiB7IHR5cGU6IFwicHJlcHJvY2Vzc1wiLCB0cmFuc2Zvcm06IHByZXByb2Nlc3MgfSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZXhwb3J0IHsgWm9kRWZmZWN0cyBhcyBab2RUcmFuc2Zvcm1lciB9O1xuZXhwb3J0IGNsYXNzIFpvZE9wdGlvbmFsIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgPT09IFpvZFBhcnNlZFR5cGUudW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gT0sodW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmlubmVyVHlwZS5fcGFyc2UoaW5wdXQpO1xuICAgIH1cbiAgICB1bndyYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlO1xuICAgIH1cbn1cblpvZE9wdGlvbmFsLmNyZWF0ZSA9ICh0eXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE9wdGlvbmFsKHtcbiAgICAgICAgaW5uZXJUeXBlOiB0eXBlLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9wdGlvbmFsLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZXhwb3J0IGNsYXNzIFpvZE51bGxhYmxlIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgPT09IFpvZFBhcnNlZFR5cGUubnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIE9LKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlLl9wYXJzZShpbnB1dCk7XG4gICAgfVxuICAgIHVud3JhcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5pbm5lclR5cGU7XG4gICAgfVxufVxuWm9kTnVsbGFibGUuY3JlYXRlID0gKHR5cGUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTnVsbGFibGUoe1xuICAgICAgICBpbm5lclR5cGU6IHR5cGUsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTnVsbGFibGUsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kRGVmYXVsdCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgbGV0IGRhdGEgPSBjdHguZGF0YTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlID09PSBab2RQYXJzZWRUeXBlLnVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGF0YSA9IHRoaXMuX2RlZi5kZWZhdWx0VmFsdWUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmlubmVyVHlwZS5fcGFyc2Uoe1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZW1vdmVEZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmlubmVyVHlwZTtcbiAgICB9XG59XG5ab2REZWZhdWx0LmNyZWF0ZSA9ICh0eXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZERlZmF1bHQoe1xuICAgICAgICBpbm5lclR5cGU6IHR5cGUsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRGVmYXVsdCxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiB0eXBlb2YgcGFyYW1zLmRlZmF1bHQgPT09IFwiZnVuY3Rpb25cIiA/IHBhcmFtcy5kZWZhdWx0IDogKCkgPT4gcGFyYW1zLmRlZmF1bHQsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY2xhc3MgWm9kQ2F0Y2ggZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIC8vIG5ld0N0eCBpcyB1c2VkIHRvIG5vdCBjb2xsZWN0IGlzc3VlcyBmcm9tIGlubmVyIHR5cGVzIGluIGN0eFxuICAgICAgICBjb25zdCBuZXdDdHggPSB7XG4gICAgICAgICAgICAuLi5jdHgsXG4gICAgICAgICAgICBjb21tb246IHtcbiAgICAgICAgICAgICAgICAuLi5jdHguY29tbW9uLFxuICAgICAgICAgICAgICAgIGlzc3VlczogW10sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9kZWYuaW5uZXJUeXBlLl9wYXJzZSh7XG4gICAgICAgICAgICBkYXRhOiBuZXdDdHguZGF0YSxcbiAgICAgICAgICAgIHBhdGg6IG5ld0N0eC5wYXRoLFxuICAgICAgICAgICAgcGFyZW50OiB7XG4gICAgICAgICAgICAgICAgLi4ubmV3Q3R4LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpc0FzeW5jKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBcInZhbGlkXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiByZXN1bHQuc3RhdHVzID09PSBcInZhbGlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcmVzdWx0LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX2RlZi5jYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQgZXJyb3IoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWm9kRXJyb3IobmV3Q3R4LmNvbW1vbi5pc3N1ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IG5ld0N0eC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdGF0dXM6IFwidmFsaWRcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogcmVzdWx0LnN0YXR1cyA9PT0gXCJ2YWxpZFwiXG4gICAgICAgICAgICAgICAgICAgID8gcmVzdWx0LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5fZGVmLmNhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGVycm9yKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWm9kRXJyb3IobmV3Q3R4LmNvbW1vbi5pc3N1ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBuZXdDdHguZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlbW92ZUNhdGNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmlubmVyVHlwZTtcbiAgICB9XG59XG5ab2RDYXRjaC5jcmVhdGUgPSAodHlwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RDYXRjaCh7XG4gICAgICAgIGlubmVyVHlwZTogdHlwZSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RDYXRjaCxcbiAgICAgICAgY2F0Y2hWYWx1ZTogdHlwZW9mIHBhcmFtcy5jYXRjaCA9PT0gXCJmdW5jdGlvblwiID8gcGFyYW1zLmNhdGNoIDogKCkgPT4gcGFyYW1zLmNhdGNoLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZXhwb3J0IGNsYXNzIFpvZE5hTiBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLm5hbikge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5uYW4sXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzdGF0dXM6IFwidmFsaWRcIiwgdmFsdWU6IGlucHV0LmRhdGEgfTtcbiAgICB9XG59XG5ab2ROYU4uY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTmFOKHtcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2ROYU4sXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5leHBvcnQgY29uc3QgQlJBTkQgPSBTeW1ib2woXCJ6b2RfYnJhbmRcIik7XG5leHBvcnQgY2xhc3MgWm9kQnJhbmRlZCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGN0eC5kYXRhO1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnR5cGUuX3BhcnNlKHtcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdW53cmFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnR5cGU7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFpvZFBpcGVsaW5lIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzLCBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVBc3luYyA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpblJlc3VsdCA9IGF3YWl0IHRoaXMuX2RlZi5pbi5fcGFyc2VBc3luYyh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGluUmVzdWx0LnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgIGlmIChpblJlc3VsdC5zdGF0dXMgPT09IFwiZGlydHlcIikge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERJUlRZKGluUmVzdWx0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWYub3V0Ll9wYXJzZUFzeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGluUmVzdWx0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBc3luYygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaW5SZXN1bHQgPSB0aGlzLl9kZWYuaW4uX3BhcnNlU3luYyh7XG4gICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChpblJlc3VsdC5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgaWYgKGluUmVzdWx0LnN0YXR1cyA9PT0gXCJkaXJ0eVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBcImRpcnR5XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpblJlc3VsdC52YWx1ZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5vdXQuX3BhcnNlU3luYyh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGluUmVzdWx0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGNyZWF0ZShhLCBiKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kUGlwZWxpbmUoe1xuICAgICAgICAgICAgaW46IGEsXG4gICAgICAgICAgICBvdXQ6IGIsXG4gICAgICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFBpcGVsaW5lLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgWm9kUmVhZG9ubHkgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fZGVmLmlubmVyVHlwZS5fcGFyc2UoaW5wdXQpO1xuICAgICAgICBjb25zdCBmcmVlemUgPSAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzVmFsaWQoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhLnZhbHVlID0gT2JqZWN0LmZyZWV6ZShkYXRhLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gaXNBc3luYyhyZXN1bHQpID8gcmVzdWx0LnRoZW4oKGRhdGEpID0+IGZyZWV6ZShkYXRhKSkgOiBmcmVlemUocmVzdWx0KTtcbiAgICB9XG4gICAgdW53cmFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmlubmVyVHlwZTtcbiAgICB9XG59XG5ab2RSZWFkb25seS5jcmVhdGUgPSAodHlwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RSZWFkb25seSh7XG4gICAgICAgIGlubmVyVHlwZTogdHlwZSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RSZWFkb25seSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vLy8vLy8vLy8gICAgICAgICAgICAgICAgICAgIC8vLy8vLy8vLy9cbi8vLy8vLy8vLy8gICAgICB6LmN1c3RvbSAgICAgIC8vLy8vLy8vLy9cbi8vLy8vLy8vLy8gICAgICAgICAgICAgICAgICAgIC8vLy8vLy8vLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmZ1bmN0aW9uIGNsZWFuUGFyYW1zKHBhcmFtcywgZGF0YSkge1xuICAgIGNvbnN0IHAgPSB0eXBlb2YgcGFyYW1zID09PSBcImZ1bmN0aW9uXCIgPyBwYXJhbXMoZGF0YSkgOiB0eXBlb2YgcGFyYW1zID09PSBcInN0cmluZ1wiID8geyBtZXNzYWdlOiBwYXJhbXMgfSA6IHBhcmFtcztcbiAgICBjb25zdCBwMiA9IHR5cGVvZiBwID09PSBcInN0cmluZ1wiID8geyBtZXNzYWdlOiBwIH0gOiBwO1xuICAgIHJldHVybiBwMjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjdXN0b20oY2hlY2ssIF9wYXJhbXMgPSB7fSwgXG4vKipcbiAqIEBkZXByZWNhdGVkXG4gKlxuICogUGFzcyBgZmF0YWxgIGludG8gdGhlIHBhcmFtcyBvYmplY3QgaW5zdGVhZDpcbiAqXG4gKiBgYGB0c1xuICogei5zdHJpbmcoKS5jdXN0b20oKHZhbCkgPT4gdmFsLmxlbmd0aCA+IDUsIHsgZmF0YWw6IGZhbHNlIH0pXG4gKiBgYGBcbiAqXG4gKi9cbmZhdGFsKSB7XG4gICAgaWYgKGNoZWNrKVxuICAgICAgICByZXR1cm4gWm9kQW55LmNyZWF0ZSgpLnN1cGVyUmVmaW5lKChkYXRhLCBjdHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHIgPSBjaGVjayhkYXRhKTtcbiAgICAgICAgICAgIGlmIChyIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByLnRoZW4oKHIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBjbGVhblBhcmFtcyhfcGFyYW1zLCBkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9mYXRhbCA9IHBhcmFtcy5mYXRhbCA/PyBmYXRhbCA/PyB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmFkZElzc3VlKHsgY29kZTogXCJjdXN0b21cIiwgLi4ucGFyYW1zLCBmYXRhbDogX2ZhdGFsIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBjbGVhblBhcmFtcyhfcGFyYW1zLCBkYXRhKTtcbiAgICAgICAgICAgICAgICBjb25zdCBfZmF0YWwgPSBwYXJhbXMuZmF0YWwgPz8gZmF0YWwgPz8gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjdHguYWRkSXNzdWUoeyBjb2RlOiBcImN1c3RvbVwiLCAuLi5wYXJhbXMsIGZhdGFsOiBfZmF0YWwgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0pO1xuICAgIHJldHVybiBab2RBbnkuY3JlYXRlKCk7XG59XG5leHBvcnQgeyBab2RUeXBlIGFzIFNjaGVtYSwgWm9kVHlwZSBhcyBab2RTY2hlbWEgfTtcbmV4cG9ydCBjb25zdCBsYXRlID0ge1xuICAgIG9iamVjdDogWm9kT2JqZWN0LmxhenljcmVhdGUsXG59O1xuZXhwb3J0IHZhciBab2RGaXJzdFBhcnR5VHlwZUtpbmQ7XG4oZnVuY3Rpb24gKFpvZEZpcnN0UGFydHlUeXBlS2luZCkge1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFN0cmluZ1wiXSA9IFwiWm9kU3RyaW5nXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kTnVtYmVyXCJdID0gXCJab2ROdW1iZXJcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2ROYU5cIl0gPSBcIlpvZE5hTlwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZEJpZ0ludFwiXSA9IFwiWm9kQmlnSW50XCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kQm9vbGVhblwiXSA9IFwiWm9kQm9vbGVhblwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZERhdGVcIl0gPSBcIlpvZERhdGVcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RTeW1ib2xcIl0gPSBcIlpvZFN5bWJvbFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFVuZGVmaW5lZFwiXSA9IFwiWm9kVW5kZWZpbmVkXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kTnVsbFwiXSA9IFwiWm9kTnVsbFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZEFueVwiXSA9IFwiWm9kQW55XCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kVW5rbm93blwiXSA9IFwiWm9kVW5rbm93blwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZE5ldmVyXCJdID0gXCJab2ROZXZlclwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFZvaWRcIl0gPSBcIlpvZFZvaWRcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RBcnJheVwiXSA9IFwiWm9kQXJyYXlcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RPYmplY3RcIl0gPSBcIlpvZE9iamVjdFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFVuaW9uXCJdID0gXCJab2RVbmlvblwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZERpc2NyaW1pbmF0ZWRVbmlvblwiXSA9IFwiWm9kRGlzY3JpbWluYXRlZFVuaW9uXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kSW50ZXJzZWN0aW9uXCJdID0gXCJab2RJbnRlcnNlY3Rpb25cIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RUdXBsZVwiXSA9IFwiWm9kVHVwbGVcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RSZWNvcmRcIl0gPSBcIlpvZFJlY29yZFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZE1hcFwiXSA9IFwiWm9kTWFwXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kU2V0XCJdID0gXCJab2RTZXRcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RGdW5jdGlvblwiXSA9IFwiWm9kRnVuY3Rpb25cIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RMYXp5XCJdID0gXCJab2RMYXp5XCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kTGl0ZXJhbFwiXSA9IFwiWm9kTGl0ZXJhbFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZEVudW1cIl0gPSBcIlpvZEVudW1cIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RFZmZlY3RzXCJdID0gXCJab2RFZmZlY3RzXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kTmF0aXZlRW51bVwiXSA9IFwiWm9kTmF0aXZlRW51bVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZE9wdGlvbmFsXCJdID0gXCJab2RPcHRpb25hbFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZE51bGxhYmxlXCJdID0gXCJab2ROdWxsYWJsZVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZERlZmF1bHRcIl0gPSBcIlpvZERlZmF1bHRcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RDYXRjaFwiXSA9IFwiWm9kQ2F0Y2hcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RQcm9taXNlXCJdID0gXCJab2RQcm9taXNlXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kQnJhbmRlZFwiXSA9IFwiWm9kQnJhbmRlZFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFBpcGVsaW5lXCJdID0gXCJab2RQaXBlbGluZVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFJlYWRvbmx5XCJdID0gXCJab2RSZWFkb25seVwiO1xufSkoWm9kRmlyc3RQYXJ0eVR5cGVLaW5kIHx8IChab2RGaXJzdFBhcnR5VHlwZUtpbmQgPSB7fSkpO1xuLy8gcmVxdWlyZXMgVFMgNC40K1xuY2xhc3MgQ2xhc3Mge1xuICAgIGNvbnN0cnVjdG9yKC4uLl8pIHsgfVxufVxuY29uc3QgaW5zdGFuY2VPZlR5cGUgPSAoXG4vLyBjb25zdCBpbnN0YW5jZU9mVHlwZSA9IDxUIGV4dGVuZHMgbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55PihcbmNscywgcGFyYW1zID0ge1xuICAgIG1lc3NhZ2U6IGBJbnB1dCBub3QgaW5zdGFuY2Ugb2YgJHtjbHMubmFtZX1gLFxufSkgPT4gY3VzdG9tKChkYXRhKSA9PiBkYXRhIGluc3RhbmNlb2YgY2xzLCBwYXJhbXMpO1xuY29uc3Qgc3RyaW5nVHlwZSA9IFpvZFN0cmluZy5jcmVhdGU7XG5jb25zdCBudW1iZXJUeXBlID0gWm9kTnVtYmVyLmNyZWF0ZTtcbmNvbnN0IG5hblR5cGUgPSBab2ROYU4uY3JlYXRlO1xuY29uc3QgYmlnSW50VHlwZSA9IFpvZEJpZ0ludC5jcmVhdGU7XG5jb25zdCBib29sZWFuVHlwZSA9IFpvZEJvb2xlYW4uY3JlYXRlO1xuY29uc3QgZGF0ZVR5cGUgPSBab2REYXRlLmNyZWF0ZTtcbmNvbnN0IHN5bWJvbFR5cGUgPSBab2RTeW1ib2wuY3JlYXRlO1xuY29uc3QgdW5kZWZpbmVkVHlwZSA9IFpvZFVuZGVmaW5lZC5jcmVhdGU7XG5jb25zdCBudWxsVHlwZSA9IFpvZE51bGwuY3JlYXRlO1xuY29uc3QgYW55VHlwZSA9IFpvZEFueS5jcmVhdGU7XG5jb25zdCB1bmtub3duVHlwZSA9IFpvZFVua25vd24uY3JlYXRlO1xuY29uc3QgbmV2ZXJUeXBlID0gWm9kTmV2ZXIuY3JlYXRlO1xuY29uc3Qgdm9pZFR5cGUgPSBab2RWb2lkLmNyZWF0ZTtcbmNvbnN0IGFycmF5VHlwZSA9IFpvZEFycmF5LmNyZWF0ZTtcbmNvbnN0IG9iamVjdFR5cGUgPSBab2RPYmplY3QuY3JlYXRlO1xuY29uc3Qgc3RyaWN0T2JqZWN0VHlwZSA9IFpvZE9iamVjdC5zdHJpY3RDcmVhdGU7XG5jb25zdCB1bmlvblR5cGUgPSBab2RVbmlvbi5jcmVhdGU7XG5jb25zdCBkaXNjcmltaW5hdGVkVW5pb25UeXBlID0gWm9kRGlzY3JpbWluYXRlZFVuaW9uLmNyZWF0ZTtcbmNvbnN0IGludGVyc2VjdGlvblR5cGUgPSBab2RJbnRlcnNlY3Rpb24uY3JlYXRlO1xuY29uc3QgdHVwbGVUeXBlID0gWm9kVHVwbGUuY3JlYXRlO1xuY29uc3QgcmVjb3JkVHlwZSA9IFpvZFJlY29yZC5jcmVhdGU7XG5jb25zdCBtYXBUeXBlID0gWm9kTWFwLmNyZWF0ZTtcbmNvbnN0IHNldFR5cGUgPSBab2RTZXQuY3JlYXRlO1xuY29uc3QgZnVuY3Rpb25UeXBlID0gWm9kRnVuY3Rpb24uY3JlYXRlO1xuY29uc3QgbGF6eVR5cGUgPSBab2RMYXp5LmNyZWF0ZTtcbmNvbnN0IGxpdGVyYWxUeXBlID0gWm9kTGl0ZXJhbC5jcmVhdGU7XG5jb25zdCBlbnVtVHlwZSA9IFpvZEVudW0uY3JlYXRlO1xuY29uc3QgbmF0aXZlRW51bVR5cGUgPSBab2ROYXRpdmVFbnVtLmNyZWF0ZTtcbmNvbnN0IHByb21pc2VUeXBlID0gWm9kUHJvbWlzZS5jcmVhdGU7XG5jb25zdCBlZmZlY3RzVHlwZSA9IFpvZEVmZmVjdHMuY3JlYXRlO1xuY29uc3Qgb3B0aW9uYWxUeXBlID0gWm9kT3B0aW9uYWwuY3JlYXRlO1xuY29uc3QgbnVsbGFibGVUeXBlID0gWm9kTnVsbGFibGUuY3JlYXRlO1xuY29uc3QgcHJlcHJvY2Vzc1R5cGUgPSBab2RFZmZlY3RzLmNyZWF0ZVdpdGhQcmVwcm9jZXNzO1xuY29uc3QgcGlwZWxpbmVUeXBlID0gWm9kUGlwZWxpbmUuY3JlYXRlO1xuY29uc3Qgb3N0cmluZyA9ICgpID0+IHN0cmluZ1R5cGUoKS5vcHRpb25hbCgpO1xuY29uc3Qgb251bWJlciA9ICgpID0+IG51bWJlclR5cGUoKS5vcHRpb25hbCgpO1xuY29uc3Qgb2Jvb2xlYW4gPSAoKSA9PiBib29sZWFuVHlwZSgpLm9wdGlvbmFsKCk7XG5leHBvcnQgY29uc3QgY29lcmNlID0ge1xuICAgIHN0cmluZzogKChhcmcpID0+IFpvZFN0cmluZy5jcmVhdGUoeyAuLi5hcmcsIGNvZXJjZTogdHJ1ZSB9KSksXG4gICAgbnVtYmVyOiAoKGFyZykgPT4gWm9kTnVtYmVyLmNyZWF0ZSh7IC4uLmFyZywgY29lcmNlOiB0cnVlIH0pKSxcbiAgICBib29sZWFuOiAoKGFyZykgPT4gWm9kQm9vbGVhbi5jcmVhdGUoe1xuICAgICAgICAuLi5hcmcsXG4gICAgICAgIGNvZXJjZTogdHJ1ZSxcbiAgICB9KSksXG4gICAgYmlnaW50OiAoKGFyZykgPT4gWm9kQmlnSW50LmNyZWF0ZSh7IC4uLmFyZywgY29lcmNlOiB0cnVlIH0pKSxcbiAgICBkYXRlOiAoKGFyZykgPT4gWm9kRGF0ZS5jcmVhdGUoeyAuLi5hcmcsIGNvZXJjZTogdHJ1ZSB9KSksXG59O1xuZXhwb3J0IHsgYW55VHlwZSBhcyBhbnksIGFycmF5VHlwZSBhcyBhcnJheSwgYmlnSW50VHlwZSBhcyBiaWdpbnQsIGJvb2xlYW5UeXBlIGFzIGJvb2xlYW4sIGRhdGVUeXBlIGFzIGRhdGUsIGRpc2NyaW1pbmF0ZWRVbmlvblR5cGUgYXMgZGlzY3JpbWluYXRlZFVuaW9uLCBlZmZlY3RzVHlwZSBhcyBlZmZlY3QsIGVudW1UeXBlIGFzIGVudW0sIGZ1bmN0aW9uVHlwZSBhcyBmdW5jdGlvbiwgaW5zdGFuY2VPZlR5cGUgYXMgaW5zdGFuY2VvZiwgaW50ZXJzZWN0aW9uVHlwZSBhcyBpbnRlcnNlY3Rpb24sIGxhenlUeXBlIGFzIGxhenksIGxpdGVyYWxUeXBlIGFzIGxpdGVyYWwsIG1hcFR5cGUgYXMgbWFwLCBuYW5UeXBlIGFzIG5hbiwgbmF0aXZlRW51bVR5cGUgYXMgbmF0aXZlRW51bSwgbmV2ZXJUeXBlIGFzIG5ldmVyLCBudWxsVHlwZSBhcyBudWxsLCBudWxsYWJsZVR5cGUgYXMgbnVsbGFibGUsIG51bWJlclR5cGUgYXMgbnVtYmVyLCBvYmplY3RUeXBlIGFzIG9iamVjdCwgb2Jvb2xlYW4sIG9udW1iZXIsIG9wdGlvbmFsVHlwZSBhcyBvcHRpb25hbCwgb3N0cmluZywgcGlwZWxpbmVUeXBlIGFzIHBpcGVsaW5lLCBwcmVwcm9jZXNzVHlwZSBhcyBwcmVwcm9jZXNzLCBwcm9taXNlVHlwZSBhcyBwcm9taXNlLCByZWNvcmRUeXBlIGFzIHJlY29yZCwgc2V0VHlwZSBhcyBzZXQsIHN0cmljdE9iamVjdFR5cGUgYXMgc3RyaWN0T2JqZWN0LCBzdHJpbmdUeXBlIGFzIHN0cmluZywgc3ltYm9sVHlwZSBhcyBzeW1ib2wsIGVmZmVjdHNUeXBlIGFzIHRyYW5zZm9ybWVyLCB0dXBsZVR5cGUgYXMgdHVwbGUsIHVuZGVmaW5lZFR5cGUgYXMgdW5kZWZpbmVkLCB1bmlvblR5cGUgYXMgdW5pb24sIHVua25vd25UeXBlIGFzIHVua25vd24sIHZvaWRUeXBlIGFzIHZvaWQsIH07XG5leHBvcnQgY29uc3QgTkVWRVIgPSBJTlZBTElEO1xuIl0sIm5hbWVzIjpbIlpvZEVycm9yIiwiWm9kSXNzdWVDb2RlIiwiZGVmYXVsdEVycm9yTWFwIiwiZ2V0RXJyb3JNYXAiLCJlcnJvclV0aWwiLCJESVJUWSIsIklOVkFMSUQiLCJPSyIsIlBhcnNlU3RhdHVzIiwiYWRkSXNzdWVUb0NvbnRleHQiLCJpc0Fib3J0ZWQiLCJpc0FzeW5jIiwiaXNEaXJ0eSIsImlzVmFsaWQiLCJtYWtlSXNzdWUiLCJ1dGlsIiwiWm9kUGFyc2VkVHlwZSIsImdldFBhcnNlZFR5cGUiLCJQYXJzZUlucHV0TGF6eVBhdGgiLCJjb25zdHJ1Y3RvciIsInBhcmVudCIsInZhbHVlIiwicGF0aCIsImtleSIsIl9jYWNoZWRQYXRoIiwiZGF0YSIsIl9wYXRoIiwiX2tleSIsImxlbmd0aCIsIkFycmF5IiwiaXNBcnJheSIsInB1c2giLCJoYW5kbGVSZXN1bHQiLCJjdHgiLCJyZXN1bHQiLCJzdWNjZXNzIiwiY29tbW9uIiwiaXNzdWVzIiwiRXJyb3IiLCJlcnJvciIsIl9lcnJvciIsInByb2Nlc3NDcmVhdGVQYXJhbXMiLCJwYXJhbXMiLCJlcnJvck1hcCIsImludmFsaWRfdHlwZV9lcnJvciIsInJlcXVpcmVkX2Vycm9yIiwiZGVzY3JpcHRpb24iLCJjdXN0b21NYXAiLCJpc3MiLCJtZXNzYWdlIiwiY29kZSIsImRlZmF1bHRFcnJvciIsIlpvZFR5cGUiLCJfZGVmIiwiX2dldFR5cGUiLCJpbnB1dCIsIl9nZXRPclJldHVybkN0eCIsInBhcnNlZFR5cGUiLCJzY2hlbWFFcnJvck1hcCIsIl9wcm9jZXNzSW5wdXRQYXJhbXMiLCJzdGF0dXMiLCJfcGFyc2VTeW5jIiwiX3BhcnNlIiwiX3BhcnNlQXN5bmMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInBhcnNlIiwic2FmZVBhcnNlIiwiYXN5bmMiLCJjb250ZXh0dWFsRXJyb3JNYXAiLCJlcnIiLCJ0b0xvd2VyQ2FzZSIsImluY2x1ZGVzIiwidGhlbiIsInBhcnNlQXN5bmMiLCJzYWZlUGFyc2VBc3luYyIsIm1heWJlQXN5bmNSZXN1bHQiLCJyZWZpbmUiLCJjaGVjayIsImdldElzc3VlUHJvcGVydGllcyIsInZhbCIsIl9yZWZpbmVtZW50Iiwic2V0RXJyb3IiLCJhZGRJc3N1ZSIsImN1c3RvbSIsInJlZmluZW1lbnQiLCJyZWZpbmVtZW50RGF0YSIsIlpvZEVmZmVjdHMiLCJzY2hlbWEiLCJ0eXBlTmFtZSIsIlpvZEZpcnN0UGFydHlUeXBlS2luZCIsImVmZmVjdCIsInR5cGUiLCJzdXBlclJlZmluZSIsImRlZiIsInNwYSIsImJpbmQiLCJvcHRpb25hbCIsIm51bGxhYmxlIiwibnVsbGlzaCIsImFycmF5IiwicHJvbWlzZSIsIm9yIiwiYW5kIiwidHJhbnNmb3JtIiwiYnJhbmQiLCJkZWZhdWx0IiwiY2F0Y2giLCJkZXNjcmliZSIsInBpcGUiLCJyZWFkb25seSIsImlzTnVsbGFibGUiLCJpc09wdGlvbmFsIiwidmVyc2lvbiIsInZlbmRvciIsInZhbGlkYXRlIiwiWm9kT3B0aW9uYWwiLCJjcmVhdGUiLCJab2ROdWxsYWJsZSIsIlpvZEFycmF5IiwiWm9kUHJvbWlzZSIsIm9wdGlvbiIsIlpvZFVuaW9uIiwiaW5jb21pbmciLCJab2RJbnRlcnNlY3Rpb24iLCJkZWZhdWx0VmFsdWVGdW5jIiwiWm9kRGVmYXVsdCIsImlubmVyVHlwZSIsImRlZmF1bHRWYWx1ZSIsIlpvZEJyYW5kZWQiLCJjYXRjaFZhbHVlRnVuYyIsIlpvZENhdGNoIiwiY2F0Y2hWYWx1ZSIsIlRoaXMiLCJ0YXJnZXQiLCJab2RQaXBlbGluZSIsIlpvZFJlYWRvbmx5IiwidW5kZWZpbmVkIiwiY3VpZFJlZ2V4IiwiY3VpZDJSZWdleCIsInVsaWRSZWdleCIsInV1aWRSZWdleCIsIm5hbm9pZFJlZ2V4Iiwiand0UmVnZXgiLCJkdXJhdGlvblJlZ2V4IiwiZW1haWxSZWdleCIsIl9lbW9qaVJlZ2V4IiwiZW1vamlSZWdleCIsImlwdjRSZWdleCIsImlwdjRDaWRyUmVnZXgiLCJpcHY2UmVnZXgiLCJpcHY2Q2lkclJlZ2V4IiwiYmFzZTY0UmVnZXgiLCJiYXNlNjR1cmxSZWdleCIsImRhdGVSZWdleFNvdXJjZSIsImRhdGVSZWdleCIsIlJlZ0V4cCIsInRpbWVSZWdleFNvdXJjZSIsImFyZ3MiLCJzZWNvbmRzUmVnZXhTb3VyY2UiLCJwcmVjaXNpb24iLCJzZWNvbmRzUXVhbnRpZmllciIsInRpbWVSZWdleCIsImRhdGV0aW1lUmVnZXgiLCJyZWdleCIsIm9wdHMiLCJsb2NhbCIsIm9mZnNldCIsImpvaW4iLCJpc1ZhbGlkSVAiLCJpcCIsInRlc3QiLCJpc1ZhbGlkSldUIiwiand0IiwiYWxnIiwiaGVhZGVyIiwic3BsaXQiLCJiYXNlNjQiLCJyZXBsYWNlIiwicGFkRW5kIiwiZGVjb2RlZCIsIkpTT04iLCJhdG9iIiwidHlwIiwiaXNWYWxpZENpZHIiLCJab2RTdHJpbmciLCJjb2VyY2UiLCJTdHJpbmciLCJzdHJpbmciLCJpbnZhbGlkX3R5cGUiLCJleHBlY3RlZCIsInJlY2VpdmVkIiwiY2hlY2tzIiwia2luZCIsInRvb19zbWFsbCIsIm1pbmltdW0iLCJpbmNsdXNpdmUiLCJleGFjdCIsImRpcnR5IiwidG9vX2JpZyIsIm1heGltdW0iLCJ0b29CaWciLCJ0b29TbWFsbCIsInZhbGlkYXRpb24iLCJpbnZhbGlkX3N0cmluZyIsIlVSTCIsImxhc3RJbmRleCIsInRlc3RSZXN1bHQiLCJ0cmltIiwicG9zaXRpb24iLCJ0b1VwcGVyQ2FzZSIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsImFzc2VydE5ldmVyIiwiX3JlZ2V4IiwiZXJyVG9PYmoiLCJfYWRkQ2hlY2siLCJlbWFpbCIsInVybCIsImVtb2ppIiwidXVpZCIsIm5hbm9pZCIsImN1aWQiLCJjdWlkMiIsInVsaWQiLCJiYXNlNjR1cmwiLCJvcHRpb25zIiwiY2lkciIsImRhdGV0aW1lIiwiZGF0ZSIsInRpbWUiLCJkdXJhdGlvbiIsIm1pbiIsIm1pbkxlbmd0aCIsIm1heCIsIm1heExlbmd0aCIsImxlbiIsIm5vbmVtcHR5IiwiaXNEYXRldGltZSIsImZpbmQiLCJjaCIsImlzRGF0ZSIsImlzVGltZSIsImlzRHVyYXRpb24iLCJpc0VtYWlsIiwiaXNVUkwiLCJpc0Vtb2ppIiwiaXNVVUlEIiwiaXNOQU5PSUQiLCJpc0NVSUQiLCJpc0NVSUQyIiwiaXNVTElEIiwiaXNJUCIsImlzQ0lEUiIsImlzQmFzZTY0IiwiaXNCYXNlNjR1cmwiLCJmbG9hdFNhZmVSZW1haW5kZXIiLCJzdGVwIiwidmFsRGVjQ291bnQiLCJ0b1N0cmluZyIsInN0ZXBEZWNDb3VudCIsImRlY0NvdW50IiwidmFsSW50IiwiTnVtYmVyIiwicGFyc2VJbnQiLCJ0b0ZpeGVkIiwic3RlcEludCIsIlpvZE51bWJlciIsImFyZ3VtZW50cyIsImd0ZSIsImx0ZSIsIm11bHRpcGxlT2YiLCJudW1iZXIiLCJpc0ludGVnZXIiLCJub3RfbXVsdGlwbGVfb2YiLCJpc0Zpbml0ZSIsIm5vdF9maW5pdGUiLCJzZXRMaW1pdCIsImd0IiwibHQiLCJpbnQiLCJwb3NpdGl2ZSIsIm5lZ2F0aXZlIiwibm9ucG9zaXRpdmUiLCJub25uZWdhdGl2ZSIsImZpbml0ZSIsInNhZmUiLCJNSU5fU0FGRV9JTlRFR0VSIiwiTUFYX1NBRkVfSU5URUdFUiIsIm1pblZhbHVlIiwibWF4VmFsdWUiLCJpc0ludCIsIlpvZEJpZ0ludCIsIkJpZ0ludCIsIl9nZXRJbnZhbGlkSW5wdXQiLCJiaWdpbnQiLCJab2RCb29sZWFuIiwiQm9vbGVhbiIsImJvb2xlYW4iLCJab2REYXRlIiwiRGF0ZSIsImlzTmFOIiwiZ2V0VGltZSIsImludmFsaWRfZGF0ZSIsIm1pbkRhdGUiLCJtYXhEYXRlIiwiWm9kU3ltYm9sIiwic3ltYm9sIiwiWm9kVW5kZWZpbmVkIiwiWm9kTnVsbCIsIm51bGwiLCJab2RBbnkiLCJfYW55IiwiWm9kVW5rbm93biIsIl91bmtub3duIiwiWm9kTmV2ZXIiLCJuZXZlciIsIlpvZFZvaWQiLCJ2b2lkIiwiZXhhY3RMZW5ndGgiLCJhbGwiLCJtYXAiLCJpdGVtIiwiaSIsIm1lcmdlQXJyYXkiLCJlbGVtZW50IiwiZGVlcFBhcnRpYWxpZnkiLCJab2RPYmplY3QiLCJuZXdTaGFwZSIsInNoYXBlIiwiZmllbGRTY2hlbWEiLCJ1bndyYXAiLCJab2RUdXBsZSIsIml0ZW1zIiwiX2NhY2hlZCIsIm5vbnN0cmljdCIsInBhc3N0aHJvdWdoIiwiYXVnbWVudCIsImV4dGVuZCIsIl9nZXRDYWNoZWQiLCJrZXlzIiwib2JqZWN0S2V5cyIsIm9iamVjdCIsInNoYXBlS2V5cyIsImV4dHJhS2V5cyIsImNhdGNoYWxsIiwidW5rbm93bktleXMiLCJwYWlycyIsImtleVZhbGlkYXRvciIsImFsd2F5c1NldCIsInVucmVjb2duaXplZF9rZXlzIiwic3luY1BhaXJzIiwicGFpciIsIm1lcmdlT2JqZWN0U3luYyIsInN0cmljdCIsImlzc3VlIiwic3RyaXAiLCJhdWdtZW50YXRpb24iLCJtZXJnZSIsIm1lcmdpbmciLCJtZXJnZWQiLCJzZXRLZXkiLCJpbmRleCIsInBpY2siLCJtYXNrIiwib21pdCIsImRlZXBQYXJ0aWFsIiwicGFydGlhbCIsInJlcXVpcmVkIiwibmV3RmllbGQiLCJrZXlvZiIsImNyZWF0ZVpvZEVudW0iLCJzdHJpY3RDcmVhdGUiLCJsYXp5Y3JlYXRlIiwiaGFuZGxlUmVzdWx0cyIsInJlc3VsdHMiLCJ1bmlvbkVycm9ycyIsImludmFsaWRfdW5pb24iLCJjaGlsZEN0eCIsInR5cGVzIiwiZ2V0RGlzY3JpbWluYXRvciIsIlpvZExhenkiLCJab2RMaXRlcmFsIiwiWm9kRW51bSIsIlpvZE5hdGl2ZUVudW0iLCJvYmplY3RWYWx1ZXMiLCJlbnVtIiwiWm9kRGlzY3JpbWluYXRlZFVuaW9uIiwiZGlzY3JpbWluYXRvciIsImRpc2NyaW1pbmF0b3JWYWx1ZSIsIm9wdGlvbnNNYXAiLCJnZXQiLCJpbnZhbGlkX3VuaW9uX2Rpc2NyaW1pbmF0b3IiLCJmcm9tIiwiTWFwIiwiZGlzY3JpbWluYXRvclZhbHVlcyIsImhhcyIsInNldCIsIm1lcmdlVmFsdWVzIiwiYSIsImIiLCJhVHlwZSIsImJUeXBlIiwidmFsaWQiLCJiS2V5cyIsInNoYXJlZEtleXMiLCJmaWx0ZXIiLCJpbmRleE9mIiwibmV3T2JqIiwic2hhcmVkVmFsdWUiLCJuZXdBcnJheSIsIml0ZW1BIiwiaXRlbUIiLCJoYW5kbGVQYXJzZWQiLCJwYXJzZWRMZWZ0IiwicGFyc2VkUmlnaHQiLCJpbnZhbGlkX2ludGVyc2VjdGlvbl90eXBlcyIsImxlZnQiLCJyaWdodCIsInJlc3QiLCJpdGVtSW5kZXgiLCJ4Iiwic2NoZW1hcyIsIlpvZFJlY29yZCIsImtleVNjaGVtYSIsImtleVR5cGUiLCJ2YWx1ZVNjaGVtYSIsInZhbHVlVHlwZSIsIm1lcmdlT2JqZWN0QXN5bmMiLCJmaXJzdCIsInNlY29uZCIsInRoaXJkIiwiWm9kTWFwIiwiZW50cmllcyIsImZpbmFsTWFwIiwiWm9kU2V0IiwibWluU2l6ZSIsInNpemUiLCJtYXhTaXplIiwiZmluYWxpemVTZXQiLCJlbGVtZW50cyIsInBhcnNlZFNldCIsIlNldCIsImFkZCIsInZhbHVlcyIsIlpvZEZ1bmN0aW9uIiwiaW1wbGVtZW50IiwiZnVuY3Rpb24iLCJtYWtlQXJnc0lzc3VlIiwiZXJyb3JNYXBzIiwiaXNzdWVEYXRhIiwiaW52YWxpZF9hcmd1bWVudHMiLCJhcmd1bWVudHNFcnJvciIsIm1ha2VSZXR1cm5zSXNzdWUiLCJyZXR1cm5zIiwiaW52YWxpZF9yZXR1cm5fdHlwZSIsInJldHVyblR5cGVFcnJvciIsImZuIiwibWUiLCJwYXJzZWRBcmdzIiwiZSIsIlJlZmxlY3QiLCJhcHBseSIsInBhcnNlZFJldHVybnMiLCJwYXJhbWV0ZXJzIiwicmV0dXJuVHlwZSIsImZ1bmMiLCJ2YWxpZGF0ZWRGdW5jIiwic3RyaWN0SW1wbGVtZW50IiwiZ2V0dGVyIiwibGF6eVNjaGVtYSIsImludmFsaWRfbGl0ZXJhbCIsImV4cGVjdGVkVmFsdWVzIiwiam9pblZhbHVlcyIsIl9jYWNoZSIsImludmFsaWRfZW51bV92YWx1ZSIsImVudW1WYWx1ZXMiLCJWYWx1ZXMiLCJFbnVtIiwiZXh0cmFjdCIsIm5ld0RlZiIsImV4Y2x1ZGUiLCJvcHQiLCJuYXRpdmVFbnVtVmFsdWVzIiwiZ2V0VmFsaWRFbnVtVmFsdWVzIiwicHJvbWlzaWZpZWQiLCJzb3VyY2VUeXBlIiwiY2hlY2tDdHgiLCJhcmciLCJmYXRhbCIsImFib3J0IiwicHJvY2Vzc2VkIiwiZXhlY3V0ZVJlZmluZW1lbnQiLCJhY2MiLCJpbm5lciIsImJhc2UiLCJjcmVhdGVXaXRoUHJlcHJvY2VzcyIsInByZXByb2Nlc3MiLCJab2RUcmFuc2Zvcm1lciIsInJlbW92ZURlZmF1bHQiLCJuZXdDdHgiLCJyZW1vdmVDYXRjaCIsIlpvZE5hTiIsIm5hbiIsIkJSQU5EIiwiU3ltYm9sIiwiaGFuZGxlQXN5bmMiLCJpblJlc3VsdCIsImluIiwib3V0IiwiZnJlZXplIiwiT2JqZWN0IiwiY2xlYW5QYXJhbXMiLCJwIiwicDIiLCJfcGFyYW1zIiwiciIsIl9mYXRhbCIsIlNjaGVtYSIsIlpvZFNjaGVtYSIsImxhdGUiLCJDbGFzcyIsIl8iLCJpbnN0YW5jZU9mVHlwZSIsImNscyIsIm5hbWUiLCJzdHJpbmdUeXBlIiwibnVtYmVyVHlwZSIsIm5hblR5cGUiLCJiaWdJbnRUeXBlIiwiYm9vbGVhblR5cGUiLCJkYXRlVHlwZSIsInN5bWJvbFR5cGUiLCJ1bmRlZmluZWRUeXBlIiwibnVsbFR5cGUiLCJhbnlUeXBlIiwidW5rbm93blR5cGUiLCJuZXZlclR5cGUiLCJ2b2lkVHlwZSIsImFycmF5VHlwZSIsIm9iamVjdFR5cGUiLCJzdHJpY3RPYmplY3RUeXBlIiwidW5pb25UeXBlIiwiZGlzY3JpbWluYXRlZFVuaW9uVHlwZSIsImludGVyc2VjdGlvblR5cGUiLCJ0dXBsZVR5cGUiLCJyZWNvcmRUeXBlIiwibWFwVHlwZSIsInNldFR5cGUiLCJmdW5jdGlvblR5cGUiLCJsYXp5VHlwZSIsImxpdGVyYWxUeXBlIiwiZW51bVR5cGUiLCJuYXRpdmVFbnVtVHlwZSIsInByb21pc2VUeXBlIiwiZWZmZWN0c1R5cGUiLCJvcHRpb25hbFR5cGUiLCJudWxsYWJsZVR5cGUiLCJwcmVwcm9jZXNzVHlwZSIsInBpcGVsaW5lVHlwZSIsIm9zdHJpbmciLCJvbnVtYmVyIiwib2Jvb2xlYW4iLCJhbnkiLCJkaXNjcmltaW5hdGVkVW5pb24iLCJpbnN0YW5jZW9mIiwiaW50ZXJzZWN0aW9uIiwibGF6eSIsImxpdGVyYWwiLCJuYXRpdmVFbnVtIiwicGlwZWxpbmUiLCJyZWNvcmQiLCJzdHJpY3RPYmplY3QiLCJ0cmFuc2Zvcm1lciIsInR1cGxlIiwidW5pb24iLCJ1bmtub3duIiwiTkVWRVIiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(action-browser)/./node_modules/zod/v3/types.js\n"); /***/ }) }; ;